wxWidgets/tests/streams/tempfile.cpp

108 lines
2.8 KiB
C++
Raw Normal View History

///////////////////////////////////////////////////////////////////////////////
// Name: tests/streams/tempfile.cpp
// Purpose: Test wxTempFileOutputStream
// Author: Mike Wetherell
// RCS-ID: $Id$
// Copyright: (c) 2005 Mike Wetherell
// Licence: wxWidgets licence
///////////////////////////////////////////////////////////////////////////////
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
// for all others, include the necessary headers
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/wfstream.h"
#include "wx/filename.h"
#include "bstream.h"
#if wxUSE_STREAMS && wxUSE_FILE
///////////////////////////////////////////////////////////////////////////////
// Self deleting test file
class TestFile
{
public:
TestFile();
~TestFile() { if (wxFileExists(m_name)) wxRemoveFile(m_name); }
wxString GetName() const { return m_name; }
private:
wxString m_name;
};
// Initialise with a test pattern so we can see if the file is replaced
//
TestFile::TestFile()
{
wxFile file;
m_name = wxFileName::CreateTempFileName(_T("wxtest"), &file);
file.Write("Before", 6);
}
///////////////////////////////////////////////////////////////////////////////
// The test case
class tempStream : public CppUnit::TestCase
{
CPPUNIT_TEST_SUITE(tempStream);
CPPUNIT_TEST(DoNothing);
CPPUNIT_TEST(Close);
CPPUNIT_TEST(Commit);
CPPUNIT_TEST(Discard);
CPPUNIT_TEST_SUITE_END();
void DoNothing() { DoTest(DONOTHING, false); }
void Close() { DoTest(CLOSE, true); }
void Commit() { DoTest(COMMIT, true); }
void Discard() { DoTest(DISCARD, false); }
enum Action { DONOTHING, CLOSE, COMMIT, DISCARD };
void DoTest(Action action, bool shouldHaveCommited);
};
// the common test code
//
void tempStream::DoTest(Action action, bool shouldHaveCommited)
{
TestFile temp;
{
wxTempFileOutputStream out(temp.GetName());
out.Write("Affer", 5);
CPPUNIT_ASSERT(out.SeekO(2) == 2);
out.Write("t", 1);
CPPUNIT_ASSERT(out.IsSeekable());
CPPUNIT_ASSERT(out.GetLength() == 5);
CPPUNIT_ASSERT(out.TellO() == 3);
switch (action) {
case DONOTHING: break;
case COMMIT: out.Commit(); break;
case DISCARD: out.Discard(); break;
case CLOSE: out.Close();
}
}
wxFileInputStream in(temp.GetName());
char buf[32];
in.Read(buf, sizeof(buf));
buf[in.LastRead()] = 0;
CPPUNIT_ASSERT(strcmp(buf, shouldHaveCommited ? "After" : "Before") == 0);
}
// 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())
STREAM_TEST_SUBSUITE_NAMED_REGISTRATION(tempStream)
#endif // wxUSE_STREAMS && wxUSE_FILE