X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8899b155a1e4fa5f4b90e1f3bebe28088ea46bc9..32753ae949d861ddaf7c66f4c483bc57493c6c6c:/tests/streams/memstream.cpp diff --git a/tests/streams/memstream.cpp b/tests/streams/memstream.cpp index 7dee2c224e..a9e8cd6ac1 100644 --- a/tests/streams/memstream.cpp +++ b/tests/streams/memstream.cpp @@ -4,7 +4,7 @@ // Author: Hans Van Leemputten // RCS-ID: $Id$ // Copyright: (c) 2004 Hans Van Leemputten -// Licence: wxWidgets licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx/wx.h". @@ -44,6 +44,7 @@ public: CPPUNIT_TEST(Input_Read); CPPUNIT_TEST(Input_Eof); CPPUNIT_TEST(Input_LastRead); + CPPUNIT_TEST(Input_CanRead); CPPUNIT_TEST(Input_SeekI); CPPUNIT_TEST(Input_TellI); CPPUNIT_TEST(Input_Peek); @@ -56,10 +57,14 @@ public: CPPUNIT_TEST(Output_TellO); // Other test specific for Memory stream test case. + CPPUNIT_TEST(Ctor_InFromIn); + CPPUNIT_TEST(Ctor_InFromOut); CPPUNIT_TEST_SUITE_END(); protected: // Add own test here. + void Ctor_InFromIn(); + void Ctor_InFromOut(); private: const char *GetDataBuffer(); @@ -103,6 +108,54 @@ wxMemoryOutputStream *memStream::DoCreateOutStream() return pMemOutStream; } +void memStream::Ctor_InFromIn() +{ + wxMemoryInputStream *pMemInStream1 = DoCreateInStream(); + wxMemoryInputStream *pMemInStream2 = new wxMemoryInputStream(*pMemInStream1); + CPPUNIT_ASSERT(pMemInStream2->IsOk()); + CPPUNIT_ASSERT_EQUAL(pMemInStream1->GetLength(), pMemInStream2->GetLength()); + wxFileOffset len = pMemInStream2->GetLength(); + char *dat = new char[len]; + pMemInStream2->Read(dat, len); + CPPUNIT_ASSERT_EQUAL(len, (wxFileOffset)pMemInStream2->LastRead()); + wxStreamBuffer *buf = pMemInStream1->GetInputStreamBuffer(); + void *pIn = buf->GetBufferStart(); + CPPUNIT_ASSERT(memcmp(pIn, dat, len) == 0); + delete pMemInStream2; + + wxFileOffset len2 = len / 2; + CPPUNIT_ASSERT(len2); + CPPUNIT_ASSERT(pMemInStream1->SeekI(-len2, wxFromCurrent) != wxInvalidOffset); + pIn = buf->GetBufferPos(); + pMemInStream2 = new wxMemoryInputStream(*pMemInStream1, len2); + CPPUNIT_ASSERT(pMemInStream2->IsOk()); + CPPUNIT_ASSERT_EQUAL((wxFileOffset)len2, pMemInStream2->GetLength()); + pMemInStream2->Read(dat, len2); + CPPUNIT_ASSERT_EQUAL(len2, (wxFileOffset)pMemInStream2->LastRead()); + CPPUNIT_ASSERT(memcmp(pIn, dat, len2) == 0); + + delete[] dat; + delete pMemInStream2; + delete pMemInStream1; +} + +void memStream::Ctor_InFromOut() +{ + wxMemoryOutputStream *pMemOutStream = DoCreateOutStream(); + pMemOutStream->Write(GetDataBuffer(), DATABUFFER_SIZE); + wxMemoryInputStream *pMemInStream = new wxMemoryInputStream(*pMemOutStream); + CPPUNIT_ASSERT(pMemInStream->IsOk()); + CPPUNIT_ASSERT_EQUAL(pMemInStream->GetLength(), pMemOutStream->GetLength()); + size_t len = pMemInStream->GetLength(); + wxStreamBuffer *in = pMemInStream->GetInputStreamBuffer(); + wxStreamBuffer *out = pMemOutStream->GetOutputStreamBuffer(); + void *pIn = in->GetBufferStart(); + void *pOut = out->GetBufferStart(); + CPPUNIT_ASSERT(pIn != pOut); + CPPUNIT_ASSERT(memcmp(pIn, pOut, len) == 0); + delete pMemInStream; + delete pMemOutStream; +} // Register the stream sub suite, by using some stream helper macro. // Note: Don't forget to connect it to the base suite (See: bstream.cpp => StreamCase::suite())