X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3a69bca110f08171177f46893e1658cd372d5f13..438fb233a09c5304129b2ff30a679de023dd68c2:/tests/strings/strings.cpp?ds=sidebyside diff --git a/tests/strings/strings.cpp b/tests/strings/strings.cpp index 778834b91d..b83b8f18c3 100644 --- a/tests/strings/strings.cpp +++ b/tests/strings/strings.cpp @@ -53,6 +53,7 @@ private: #endif // wxLongLong_t CPPUNIT_TEST( ToDouble ); CPPUNIT_TEST( WriteBuf ); + CPPUNIT_TEST( UTF8Buf ); CPPUNIT_TEST( CStrDataTernaryOperator ); CPPUNIT_TEST( CStrDataOperators ); CPPUNIT_TEST( CStrDataImplicitConversion ); @@ -80,6 +81,7 @@ private: #endif // wxLongLong_t void ToDouble(); void WriteBuf(); + void UTF8Buf(); void CStrDataTernaryOperator(); void DoCStrDataTernaryOperator(bool cond); void CStrDataOperators(); @@ -171,6 +173,9 @@ void StringTestCase::Constructors() 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: + TEST_CTOR(((char*)NULL), ""); } @@ -186,12 +191,20 @@ void StringTestCase::Extraction() CPPUNIT_ASSERT( wxStrcmp( s.substr(3, 5).c_str() , _T("lo, w") ) == 0 ); CPPUNIT_ASSERT( wxStrcmp( s.substr(3).c_str() , _T("lo, world!") ) == 0 ); +#if wxUSE_UNICODE + static const char *germanUTF8 = "Oberfl\303\244che"; + wxString strUnicode(wxString::FromUTF8(germanUTF8)); + + CPPUNIT_ASSERT( strUnicode.Mid(0, 10) == strUnicode ); + CPPUNIT_ASSERT( strUnicode.Mid(7, 2) == "ch" ); +#endif // wxUSE_UNICODE + wxString rest; #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 ); @@ -203,10 +216,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 ); @@ -257,7 +274,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") ); @@ -622,7 +639,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++ ) @@ -643,7 +660,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()); { @@ -656,11 +673,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() @@ -683,9 +720,9 @@ void StringTestCase::DoCStrDataTernaryOperator(bool cond) const wchar_t *wcStr = L"foo"; CPPUNIT_ASSERT( CheckStr(s, (cond ? s.c_str() : wcStr)) ); - CPPUNIT_ASSERT( CheckStr(s, (cond ? s.c_str() : L"bar")) ); + CPPUNIT_ASSERT( CheckStr(s, (cond ? s.c_str() : L"foo")) ); CPPUNIT_ASSERT( CheckStr(s, (cond ? wcStr : s.c_str())) ); - CPPUNIT_ASSERT( CheckStr(s, (cond ? L"bar" : s.c_str())) ); + CPPUNIT_ASSERT( CheckStr(s, (cond ? L"foo" : s.c_str())) ); const char *mbStr = "foo"; CPPUNIT_ASSERT( CheckStr(s, (cond ? s.c_str() : mbStr)) ); @@ -725,10 +762,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()