diff --git a/src/common/sstream.cpp b/src/common/sstream.cpp index 7d276e665b..aabe01e977 100644 --- a/src/common/sstream.cpp +++ b/src/common/sstream.cpp @@ -167,13 +167,14 @@ size_t wxStringOutputStream::OnSysWrite(const void *buffer, size_t size) srcLen = size; } - wxWCharBuffer wbuf(m_conv.cMB2WC(src, srcLen, NULL /* out len */)); + size_t wlen; + wxWCharBuffer wbuf(m_conv.cMB2WC(src, srcLen, &wlen)); if ( wbuf ) { // conversion succeeded, clear the unconverted buffer m_unconv = wxMemoryBuffer(0); - *m_str += wbuf; + m_str->append(wbuf, wlen); } else // conversion failed { diff --git a/tests/streams/sstream.cpp b/tests/streams/sstream.cpp index c50fbd8c11..a6d7890183 100644 --- a/tests/streams/sstream.cpp +++ b/tests/streams/sstream.cpp @@ -56,16 +56,21 @@ public: //CPPUNIT_TEST(Output_TellO); // Other test specific for String stream test case. + CPPUNIT_TEST(Output_Check); CPPUNIT_TEST_SUITE_END(); protected: - // Add own test here. + void Output_Check(); private: // Implement base class functions. virtual wxStringInputStream *DoCreateInStream(); virtual wxStringOutputStream *DoCreateOutStream(); + // output the given string to wxStringOutputStream and check that its + // contents is exactly the same string + void CheckString(const wxString& text); + wxString m_str; }; @@ -97,6 +102,27 @@ wxStringOutputStream *strStream::DoCreateOutStream() return pStrOutStream; } +void strStream::CheckString(const wxString& text) +{ + wxStringOutputStream sos; + + size_t len = text.length(); +#if wxUSE_UNICODE + const wxCharBuffer textMB(wxConvLibc.cWC2MB(text.wc_str(), len + 1, &len)); +#else + const char *textMB = text.c_str(); +#endif + + sos.Write(textMB, len); + + CPPUNIT_ASSERT_EQUAL( text, sos.GetString() ); +} + +void strStream::Output_Check() +{ + CheckString("Hello world!"); + CheckString(wxString("hi\0dden", 8)); +} // Register the stream sub suite, by using some stream helper macro. STREAM_TEST_SUBSUITE_NAMED_REGISTRATION(strStream)