From: Vadim Zeitlin Date: Sat, 17 Mar 2007 15:38:09 +0000 (+0000) Subject: implemented wxMemoryInputStream::CanRead() and added tests for CanRead() to all strea... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/2d76b6d8c3d13ce08f0aef47f859078368f7fed7?ds=sidebyside implemented wxMemoryInputStream::CanRead() and added tests for CanRead() to all stream tests git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44872 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index e810f0beab..fc412e7954 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -71,6 +71,7 @@ All: - Added wxGridUpdateLocker helper class (Evgeniy Tarassov) - Support wxGRID_AUTOSIZE in wxGrid::SetRow/ColLabelSize() (Evgeniy Tarassov) - Added wxMemoryInputStream(wxInputStream&) ctor (Stas Sergeev) +- Implemented wxMemoryInputStream::CanRead() wxGTK: diff --git a/include/wx/mstream.h b/include/wx/mstream.h index e5eb691566..9ed77087f9 100644 --- a/include/wx/mstream.h +++ b/include/wx/mstream.h @@ -39,7 +39,8 @@ public: virtual wxFileOffset GetLength() const { return m_length; } virtual bool IsSeekable() const { return true; } - char Peek(); + virtual char Peek(); + virtual bool CanRead() const; wxStreamBuffer *GetInputStreamBuffer() const { return m_i_streambuf; } diff --git a/src/common/mstream.cpp b/src/common/mstream.cpp index b9fef96e8c..cd8ec4ecb8 100644 --- a/src/common/mstream.cpp +++ b/src/common/mstream.cpp @@ -97,6 +97,11 @@ wxMemoryInputStream::InitFromStream(wxInputStream& stream, wxFileOffset lenFile) m_length = stream.LastRead(); } +bool wxMemoryInputStream::CanRead() const +{ + return m_i_streambuf->GetIntPosition() != m_length; +} + wxMemoryInputStream::~wxMemoryInputStream() { delete m_i_streambuf; diff --git a/tests/streams/bstream.h b/tests/streams/bstream.h index fc2d6fb237..555988b496 100644 --- a/tests/streams/bstream.h +++ b/tests/streams/bstream.h @@ -45,7 +45,7 @@ protected: :m_pCleanup(value) {} ~CleanupHelper() - { + { m_pCleanup->DeleteInStream(); m_pCleanup->DeleteOutStream(); } @@ -68,7 +68,7 @@ public: // Prevent mem leaks! delete m_pCurrentIn; delete m_pCurrentOut; - } + } protected: /* @@ -108,7 +108,7 @@ protected: // Note: the input stream should at least be of min size +10! - char buf[10]; + char buf[10]; (void)stream_in.Read(buf, 10); CPPUNIT_ASSERT(!stream_in.Eof()); @@ -122,7 +122,7 @@ protected: CPPUNIT_ASSERT(stream_in.Eof()); } - // Test and see what happens to the EOF when we + // Test and see what happens to the EOF when we // read after EOF was encountered. void Input_Eof() { @@ -150,7 +150,7 @@ protected: } // Check EOF stream state. - CPPUNIT_ASSERT_MESSAGE("EOF is not EOF?", stream_in.Eof()); + CPPUNIT_ASSERT_MESSAGE("EOF is not EOF?", stream_in.Eof()); // Ok we found the end, lets see if we can go past it. for (size_t i = 0; i < 100; i++) @@ -175,6 +175,19 @@ protected: CPPUNIT_ASSERT(stream_in.LastRead() == 1); } + void Input_CanRead() + { + CleanupHelper cleanup(this); + TStreamIn &stream_in = CreateInStream(); + + CPPUNIT_ASSERT( stream_in.CanRead() ); + + // read the entire contents + (void)stream_in.Read(CreateOutStream()); + + CPPUNIT_ASSERT( !stream_in.CanRead() ); + } + // Just try to perform a SeekI() on the input stream. void Input_SeekI() { @@ -217,7 +230,7 @@ protected: CPPUNIT_ASSERT(stream_in.TellI() == pos); } } - + // Just try to perform a Peek() on the input stream. void Input_Peek() { @@ -240,7 +253,7 @@ protected: CleanupHelper cleanup(this); TStreamIn &stream_in = CreateInStream(); CPPUNIT_ASSERT(!stream_in.Eof()); - + const char *ungetstr = "test"; size_t ungetsize = stream_in.Ungetch(ungetstr, strlen(ungetstr) + 1); if (ungetsize != 0) @@ -312,7 +325,7 @@ protected: { CleanupHelper cleanup(this); TStreamOut &stream_out = CreateOutStream(); - + // First put some data in the stream, so it is not empty. char *buf = "1234567890"; (void)stream_out.Write(buf, 10); @@ -344,7 +357,7 @@ protected: // First put some extra data in the stream, so it's not empty. char *buf = "1234567890"; (void)stream_out.Write(buf, 10); - + off_t pos = stream_out.SeekO(5, wxFromStart); CPPUNIT_ASSERT(stream_out.TellO() == pos); (void)stream_out.PutC('1'); @@ -358,9 +371,9 @@ protected: protected: // Some tests can be configured... here you can find the config settings - bool m_bSimpleTellITest; // if true, no SeekI will be used by the TellI test. + bool m_bSimpleTellITest; // if true, no SeekI will be used by the TellI test. // Default false. - bool m_bSimpleTellOTest; // if true, no SeekO will be used by the TellI test. + bool m_bSimpleTellOTest; // if true, no SeekO will be used by the TellI test. // Default false. bool m_bSeekInvalidBeyondEnd; // if true a SeekI|O beyond the end of the stream should return wxInvalidOffset // Default true. @@ -368,7 +381,7 @@ protected: // Default true. protected: TStreamIn &CreateInStream() - { + { if (m_pCurrentIn) { wxFAIL_MSG(_T("Error in test case, the previouse input stream needs to be delete first!")); @@ -379,7 +392,7 @@ protected: return *m_pCurrentIn; } TStreamOut &CreateOutStream() - { + { if (m_pCurrentOut) { wxFAIL_MSG(_T("Error in test case, the previouse output stream needs to be delete first!")); @@ -389,7 +402,7 @@ protected: wxASSERT(m_pCurrentOut != NULL); return *m_pCurrentOut; } - + void DeleteInStream() { if (m_pCurrentIn == NULL) @@ -400,12 +413,12 @@ protected: DoDeleteInStream(); } void DeleteOutStream() - { + { if (m_pCurrentOut == NULL) return; - + CPPUNIT_ASSERT(m_pCurrentOut->Close()); - + delete m_pCurrentOut; m_pCurrentOut = NULL; // Incase something extra needs to be done. diff --git a/tests/streams/ffilestream.cpp b/tests/streams/ffilestream.cpp index 17a4e95ece..9714e1cbb0 100644 --- a/tests/streams/ffilestream.cpp +++ b/tests/streams/ffilestream.cpp @@ -47,6 +47,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); diff --git a/tests/streams/filestream.cpp b/tests/streams/filestream.cpp index ccec25fd47..b0edd46557 100644 --- a/tests/streams/filestream.cpp +++ b/tests/streams/filestream.cpp @@ -47,6 +47,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); diff --git a/tests/streams/memstream.cpp b/tests/streams/memstream.cpp index 731a9f6a0d..c48bf94f72 100644 --- a/tests/streams/memstream.cpp +++ b/tests/streams/memstream.cpp @@ -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); diff --git a/tests/streams/sstream.cpp b/tests/streams/sstream.cpp index 2fe4a78f12..c50fbd8c11 100644 --- a/tests/streams/sstream.cpp +++ b/tests/streams/sstream.cpp @@ -42,6 +42,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); diff --git a/tests/streams/zlibstream.cpp b/tests/streams/zlibstream.cpp index 8c3eae40c3..423d549159 100644 --- a/tests/streams/zlibstream.cpp +++ b/tests/streams/zlibstream.cpp @@ -55,6 +55,7 @@ public: CPPUNIT_TEST(Input_Read); CPPUNIT_TEST(Input_Eof); CPPUNIT_TEST(Input_LastRead); + CPPUNIT_TEST(Input_CanRead); CPPUNIT_TEST_FAIL(Input_SeekI); CPPUNIT_TEST(Input_TellI); CPPUNIT_TEST(Input_Peek);