In the past some streams returned Eof() before the end was read past rather

after, and also some streams give an error instead of Eof(). Test the archive
streams work with parent streams that have any of these behaviours.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36429 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Michael Wetherell
2005-12-18 13:58:55 +00:00
parent abffc1ff5d
commit 716e748b2f
3 changed files with 77 additions and 35 deletions

View File

@@ -196,7 +196,8 @@ TestInputStream::TestInputStream(const TestInputStream& in)
: wxInputStream(),
m_options(in.m_options),
m_pos(in.m_pos),
m_size(in.m_size)
m_size(in.m_size),
m_eoftype(in.m_eoftype)
{
m_data = new char[m_size];
memcpy(m_data, in.m_data, m_size);
@@ -251,16 +252,28 @@ size_t TestInputStream::OnSysRead(void *buffer, size_t size)
{
if (!IsOk() || !size)
return 0;
if (m_size <= m_pos) {
m_lasterror = wxSTREAM_EOF;
return 0;
size_t count;
if (m_pos >= m_size)
count = 0;
else if (m_size - m_pos < size)
count = m_size - m_pos;
else
count = size;
if (count) {
memcpy(buffer, m_data + m_pos, count);
m_pos += count;
}
if (m_size - m_pos < size)
size = m_size - m_pos;
memcpy(buffer, m_data + m_pos, size);
m_pos += size;
return size;
if (((m_eoftype & AtLast) != 0 && m_pos >= m_size) || count < size)
if ((m_eoftype & WithError) != 0)
m_lasterror = wxSTREAM_READ_ERROR;
else
m_lasterror = wxSTREAM_EOF;
return count;
}
@@ -424,17 +437,16 @@ PFileOutputStream::~PFileOutputStream()
template <class ClassFactoryT>
ArchiveTestCase<ClassFactoryT>::ArchiveTestCase(
string name,
int id,
ClassFactoryT *factory,
int options,
const wxString& archiver,
const wxString& unarchiver)
:
CppUnit::TestCase(name),
CppUnit::TestCase(TestId::MakeId() + name),
m_factory(factory),
m_options(options),
m_timeStamp(1, wxDateTime::Mar, 2004, 12, 0),
m_id(id),
m_id(TestId::GetId()),
m_archiver(archiver),
m_unarchiver(unarchiver)
{
@@ -464,7 +476,7 @@ void ArchiveTestCase<ClassFactoryT>::runTest()
// check archive could be created
CPPUNIT_ASSERT(out.GetLength() > 0);
TestInputStream in(out);
TestInputStream in(out, m_id % ((m_options & PipeIn) ? 4 : 3));
TestIterator(in);
in.Rewind();
@@ -929,7 +941,7 @@ void ArchiveTestCase<ClassFactoryT>::VerifyDir(wxString& path,
const TestEntry& testEntry = *it->second;
#ifndef __WXMSW__
#if 0 //ndef __WXMSW__
CPPUNIT_ASSERT_MESSAGE("timestamp check" + error_context,
testEntry.GetDateTime() ==
wxFileName(path).GetModificationTime());
@@ -1156,12 +1168,24 @@ void ArchiveTestCase<ClassFactoryT>::OnSetNotifier(EntryT& entry)
}
///////////////////////////////////////////////////////////////////////////////
// Make the ids
int TestId::m_seed = 6219;
// static
string TestId::MakeId()
{
m_seed = (m_seed * 171) % 30269;
return wxString::Format(_T("%-6d"), m_seed).mb_str();
}
///////////////////////////////////////////////////////////////////////////////
// Suite base
ArchiveTestSuite::ArchiveTestSuite(string name)
: CppUnit::TestSuite("archive/" + name),
m_id(0),
m_name(name.c_str(), *wxConvCurrent)
{
m_name = _T("wx") + m_name.Left(1).Upper() + m_name.Mid(1).Lower();
@@ -1209,13 +1233,11 @@ ArchiveTestSuite *ArchiveTestSuite::makeSuite()
string descr = Description(m_name, options,
generic != 0, *j, *i);
CppUnit::Test *test = makeTest(descr, m_id, options,
CppUnit::Test *test = makeTest(descr, options,
generic != 0, *j, *i);
if (test) {
if (test)
addTest(test);
m_id++;
}
}
return this;
@@ -1223,7 +1245,6 @@ ArchiveTestSuite *ArchiveTestSuite::makeSuite()
CppUnit::Test *ArchiveTestSuite::makeTest(
string WXUNUSED(descr),
int WXUNUSED(id),
int WXUNUSED(options),
bool WXUNUSED(genericInterface),
const wxString& WXUNUSED(archiver),
@@ -1241,7 +1262,6 @@ string ArchiveTestSuite::Description(const wxString& type,
const wxString& unarchiver)
{
wxString descr;
descr << m_id << _T(" ");
if (genericInterface)
descr << _T("wxArchive (") << type << _T(")");