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
This commit is contained in:
Vadim Zeitlin
2007-03-17 15:38:09 +00:00
parent 764471557e
commit 2d76b6d8c3
9 changed files with 43 additions and 18 deletions

View File

@@ -71,6 +71,7 @@ All:
- Added wxGridUpdateLocker helper class (Evgeniy Tarassov) - Added wxGridUpdateLocker helper class (Evgeniy Tarassov)
- Support wxGRID_AUTOSIZE in wxGrid::SetRow/ColLabelSize() (Evgeniy Tarassov) - Support wxGRID_AUTOSIZE in wxGrid::SetRow/ColLabelSize() (Evgeniy Tarassov)
- Added wxMemoryInputStream(wxInputStream&) ctor (Stas Sergeev) - Added wxMemoryInputStream(wxInputStream&) ctor (Stas Sergeev)
- Implemented wxMemoryInputStream::CanRead()
wxGTK: wxGTK:

View File

@@ -39,7 +39,8 @@ public:
virtual wxFileOffset GetLength() const { return m_length; } virtual wxFileOffset GetLength() const { return m_length; }
virtual bool IsSeekable() const { return true; } virtual bool IsSeekable() const { return true; }
char Peek(); virtual char Peek();
virtual bool CanRead() const;
wxStreamBuffer *GetInputStreamBuffer() const { return m_i_streambuf; } wxStreamBuffer *GetInputStreamBuffer() const { return m_i_streambuf; }

View File

@@ -97,6 +97,11 @@ wxMemoryInputStream::InitFromStream(wxInputStream& stream, wxFileOffset lenFile)
m_length = stream.LastRead(); m_length = stream.LastRead();
} }
bool wxMemoryInputStream::CanRead() const
{
return m_i_streambuf->GetIntPosition() != m_length;
}
wxMemoryInputStream::~wxMemoryInputStream() wxMemoryInputStream::~wxMemoryInputStream()
{ {
delete m_i_streambuf; delete m_i_streambuf;

View File

@@ -45,7 +45,7 @@ protected:
:m_pCleanup(value) :m_pCleanup(value)
{} {}
~CleanupHelper() ~CleanupHelper()
{ {
m_pCleanup->DeleteInStream(); m_pCleanup->DeleteInStream();
m_pCleanup->DeleteOutStream(); m_pCleanup->DeleteOutStream();
} }
@@ -68,7 +68,7 @@ public:
// Prevent mem leaks! // Prevent mem leaks!
delete m_pCurrentIn; delete m_pCurrentIn;
delete m_pCurrentOut; delete m_pCurrentOut;
} }
protected: protected:
/* /*
@@ -108,7 +108,7 @@ protected:
// Note: the input stream should at least be of min size +10! // Note: the input stream should at least be of min size +10!
char buf[10]; char buf[10];
(void)stream_in.Read(buf, 10); (void)stream_in.Read(buf, 10);
CPPUNIT_ASSERT(!stream_in.Eof()); CPPUNIT_ASSERT(!stream_in.Eof());
@@ -122,7 +122,7 @@ protected:
CPPUNIT_ASSERT(stream_in.Eof()); 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. // read after EOF was encountered.
void Input_Eof() void Input_Eof()
{ {
@@ -150,7 +150,7 @@ protected:
} }
// Check EOF stream state. // 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. // Ok we found the end, lets see if we can go past it.
for (size_t i = 0; i < 100; i++) for (size_t i = 0; i < 100; i++)
@@ -175,6 +175,19 @@ protected:
CPPUNIT_ASSERT(stream_in.LastRead() == 1); 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. // Just try to perform a SeekI() on the input stream.
void Input_SeekI() void Input_SeekI()
{ {
@@ -217,7 +230,7 @@ protected:
CPPUNIT_ASSERT(stream_in.TellI() == pos); CPPUNIT_ASSERT(stream_in.TellI() == pos);
} }
} }
// Just try to perform a Peek() on the input stream. // Just try to perform a Peek() on the input stream.
void Input_Peek() void Input_Peek()
{ {
@@ -240,7 +253,7 @@ protected:
CleanupHelper cleanup(this); CleanupHelper cleanup(this);
TStreamIn &stream_in = CreateInStream(); TStreamIn &stream_in = CreateInStream();
CPPUNIT_ASSERT(!stream_in.Eof()); CPPUNIT_ASSERT(!stream_in.Eof());
const char *ungetstr = "test"; const char *ungetstr = "test";
size_t ungetsize = stream_in.Ungetch(ungetstr, strlen(ungetstr) + 1); size_t ungetsize = stream_in.Ungetch(ungetstr, strlen(ungetstr) + 1);
if (ungetsize != 0) if (ungetsize != 0)
@@ -312,7 +325,7 @@ protected:
{ {
CleanupHelper cleanup(this); CleanupHelper cleanup(this);
TStreamOut &stream_out = CreateOutStream(); TStreamOut &stream_out = CreateOutStream();
// First put some data in the stream, so it is not empty. // First put some data in the stream, so it is not empty.
char *buf = "1234567890"; char *buf = "1234567890";
(void)stream_out.Write(buf, 10); (void)stream_out.Write(buf, 10);
@@ -344,7 +357,7 @@ protected:
// First put some extra data in the stream, so it's not empty. // First put some extra data in the stream, so it's not empty.
char *buf = "1234567890"; char *buf = "1234567890";
(void)stream_out.Write(buf, 10); (void)stream_out.Write(buf, 10);
off_t pos = stream_out.SeekO(5, wxFromStart); off_t pos = stream_out.SeekO(5, wxFromStart);
CPPUNIT_ASSERT(stream_out.TellO() == pos); CPPUNIT_ASSERT(stream_out.TellO() == pos);
(void)stream_out.PutC('1'); (void)stream_out.PutC('1');
@@ -358,9 +371,9 @@ protected:
protected: protected:
// Some tests can be configured... here you can find the config settings // 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. // 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. // Default false.
bool m_bSeekInvalidBeyondEnd; // if true a SeekI|O beyond the end of the stream should return wxInvalidOffset bool m_bSeekInvalidBeyondEnd; // if true a SeekI|O beyond the end of the stream should return wxInvalidOffset
// Default true. // Default true.
@@ -368,7 +381,7 @@ protected:
// Default true. // Default true.
protected: protected:
TStreamIn &CreateInStream() TStreamIn &CreateInStream()
{ {
if (m_pCurrentIn) if (m_pCurrentIn)
{ {
wxFAIL_MSG(_T("Error in test case, the previouse input stream needs to be delete first!")); wxFAIL_MSG(_T("Error in test case, the previouse input stream needs to be delete first!"));
@@ -379,7 +392,7 @@ protected:
return *m_pCurrentIn; return *m_pCurrentIn;
} }
TStreamOut &CreateOutStream() TStreamOut &CreateOutStream()
{ {
if (m_pCurrentOut) if (m_pCurrentOut)
{ {
wxFAIL_MSG(_T("Error in test case, the previouse output stream needs to be delete first!")); 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); wxASSERT(m_pCurrentOut != NULL);
return *m_pCurrentOut; return *m_pCurrentOut;
} }
void DeleteInStream() void DeleteInStream()
{ {
if (m_pCurrentIn == NULL) if (m_pCurrentIn == NULL)
@@ -400,12 +413,12 @@ protected:
DoDeleteInStream(); DoDeleteInStream();
} }
void DeleteOutStream() void DeleteOutStream()
{ {
if (m_pCurrentOut == NULL) if (m_pCurrentOut == NULL)
return; return;
CPPUNIT_ASSERT(m_pCurrentOut->Close()); CPPUNIT_ASSERT(m_pCurrentOut->Close());
delete m_pCurrentOut; delete m_pCurrentOut;
m_pCurrentOut = NULL; m_pCurrentOut = NULL;
// Incase something extra needs to be done. // Incase something extra needs to be done.

View File

@@ -47,6 +47,7 @@ public:
CPPUNIT_TEST(Input_Read); CPPUNIT_TEST(Input_Read);
CPPUNIT_TEST(Input_Eof); CPPUNIT_TEST(Input_Eof);
CPPUNIT_TEST(Input_LastRead); CPPUNIT_TEST(Input_LastRead);
CPPUNIT_TEST(Input_CanRead);
CPPUNIT_TEST(Input_SeekI); CPPUNIT_TEST(Input_SeekI);
CPPUNIT_TEST(Input_TellI); CPPUNIT_TEST(Input_TellI);
CPPUNIT_TEST(Input_Peek); CPPUNIT_TEST(Input_Peek);

View File

@@ -47,6 +47,7 @@ public:
CPPUNIT_TEST(Input_Read); CPPUNIT_TEST(Input_Read);
CPPUNIT_TEST(Input_Eof); CPPUNIT_TEST(Input_Eof);
CPPUNIT_TEST(Input_LastRead); CPPUNIT_TEST(Input_LastRead);
CPPUNIT_TEST(Input_CanRead);
CPPUNIT_TEST(Input_SeekI); CPPUNIT_TEST(Input_SeekI);
CPPUNIT_TEST(Input_TellI); CPPUNIT_TEST(Input_TellI);
CPPUNIT_TEST(Input_Peek); CPPUNIT_TEST(Input_Peek);

View File

@@ -44,6 +44,7 @@ public:
CPPUNIT_TEST(Input_Read); CPPUNIT_TEST(Input_Read);
CPPUNIT_TEST(Input_Eof); CPPUNIT_TEST(Input_Eof);
CPPUNIT_TEST(Input_LastRead); CPPUNIT_TEST(Input_LastRead);
CPPUNIT_TEST(Input_CanRead);
CPPUNIT_TEST(Input_SeekI); CPPUNIT_TEST(Input_SeekI);
CPPUNIT_TEST(Input_TellI); CPPUNIT_TEST(Input_TellI);
CPPUNIT_TEST(Input_Peek); CPPUNIT_TEST(Input_Peek);

View File

@@ -42,6 +42,7 @@ public:
CPPUNIT_TEST(Input_Read); CPPUNIT_TEST(Input_Read);
CPPUNIT_TEST(Input_Eof); CPPUNIT_TEST(Input_Eof);
CPPUNIT_TEST(Input_LastRead); CPPUNIT_TEST(Input_LastRead);
CPPUNIT_TEST(Input_CanRead);
CPPUNIT_TEST(Input_SeekI); CPPUNIT_TEST(Input_SeekI);
CPPUNIT_TEST(Input_TellI); CPPUNIT_TEST(Input_TellI);
CPPUNIT_TEST(Input_Peek); CPPUNIT_TEST(Input_Peek);

View File

@@ -55,6 +55,7 @@ public:
CPPUNIT_TEST(Input_Read); CPPUNIT_TEST(Input_Read);
CPPUNIT_TEST(Input_Eof); CPPUNIT_TEST(Input_Eof);
CPPUNIT_TEST(Input_LastRead); CPPUNIT_TEST(Input_LastRead);
CPPUNIT_TEST(Input_CanRead);
CPPUNIT_TEST_FAIL(Input_SeekI); CPPUNIT_TEST_FAIL(Input_SeekI);
CPPUNIT_TEST(Input_TellI); CPPUNIT_TEST(Input_TellI);
CPPUNIT_TEST(Input_Peek); CPPUNIT_TEST(Input_Peek);