1/////////////////////////////////////////////////////////////////////////////// 2// Name: tests/streams/filestream.cpp 3// Purpose: Test wxFileInputStream/wxFileOutputStream 4// Author: Hans Van Leemputten 5// RCS-ID: $Id: filestream.cpp 30685 2004-11-22 05:00:19Z RN $ 6// Copyright: (c) 2004 Hans Van Leemputten 7// Licence: wxWidgets licence 8/////////////////////////////////////////////////////////////////////////////// 9 10// For compilers that support precompilation, includes "wx/wx.h". 11// and "wx/cppunit.h" 12#include "testprec.h" 13 14#ifdef __BORLANDC__ 15 #pragma hdrstop 16#endif 17 18// for all others, include the necessary headers 19#ifndef WX_PRECOMP 20 #include "wx/wx.h" 21#endif 22 23#include "wx/wfstream.h" 24 25#include "bstream.h" 26 27#define DATABUFFER_SIZE 1024 28 29static const wxString FILENAME_FILEINSTREAM = _T("fileinstream.test"); 30static const wxString FILENAME_FILEOUTSTREAM = _T("fileoutstream.test"); 31 32/////////////////////////////////////////////////////////////////////////////// 33// The test case 34// 35// Try to fully test wxFileInputStream and wxFileOutputStream 36 37class fileStream : public BaseStreamTestCase<wxFileInputStream, wxFileOutputStream> 38{ 39public: 40 fileStream(); 41 virtual ~fileStream(); 42 43 CPPUNIT_TEST_SUITE(fileStream); 44 // Base class stream tests the fileStream supports. 45 CPPUNIT_TEST(Input_GetSize); 46 CPPUNIT_TEST(Input_GetC); 47 CPPUNIT_TEST(Input_Read); 48 CPPUNIT_TEST(Input_Eof); 49 CPPUNIT_TEST(Input_LastRead); 50 CPPUNIT_TEST(Input_SeekI); 51 CPPUNIT_TEST(Input_TellI); 52 CPPUNIT_TEST(Input_Peek); 53 CPPUNIT_TEST(Input_Ungetch); 54 55 CPPUNIT_TEST(Output_PutC); 56 CPPUNIT_TEST(Output_Write); 57 CPPUNIT_TEST(Output_LastWrite); 58 CPPUNIT_TEST(Output_SeekO); 59 CPPUNIT_TEST(Output_TellO); 60 61 // Other test specific for File stream test case. 62 CPPUNIT_TEST_SUITE_END(); 63 64protected: 65 // Add own test here. 66 67private: 68 // Implement base class functions. 69 virtual wxFileInputStream *DoCreateInStream(); 70 virtual wxFileOutputStream *DoCreateOutStream(); 71 virtual void DoDeleteOutStream(); 72 73private: 74 wxString GetInFileName() const; 75}; 76 77fileStream::fileStream() 78{ 79 m_bSeekInvalidBeyondEnd = false; 80} 81 82fileStream::~fileStream() 83{ 84 // Remove the temp test file... 85 ::wxRemoveFile(FILENAME_FILEINSTREAM); 86 ::wxRemoveFile(FILENAME_FILEOUTSTREAM); 87} 88 89wxFileInputStream *fileStream::DoCreateInStream() 90{ 91 wxFileInputStream *pFileInStream = new wxFileInputStream(GetInFileName()); 92 CPPUNIT_ASSERT(pFileInStream->IsOk()); 93 return pFileInStream; 94} 95wxFileOutputStream *fileStream::DoCreateOutStream() 96{ 97 wxFileOutputStream *pFileOutStream = new wxFileOutputStream(FILENAME_FILEOUTSTREAM); 98 CPPUNIT_ASSERT(pFileOutStream->IsOk()); 99 return pFileOutStream; 100} 101 102void fileStream::DoDeleteOutStream() 103{ 104 ::wxRemoveFile(FILENAME_FILEOUTSTREAM); 105} 106 107wxString fileStream::GetInFileName() const 108{ 109 static bool bFileCreated = false; 110 if (!bFileCreated) 111 { 112 // Create the file only once 113 bFileCreated = true; 114 115 // Make sure we have a input file... 116 char buf[DATABUFFER_SIZE]; 117 wxFileOutputStream out(FILENAME_FILEINSTREAM); 118 119 // Init the data buffer. 120 for (size_t i = 0; i < DATABUFFER_SIZE; i++) 121 buf[i] = (i % 0xFF); 122 123 // Save the data 124 out.Write(buf, DATABUFFER_SIZE); 125 } 126 127 return FILENAME_FILEINSTREAM; 128} 129 130// Register the stream sub suite, by using some stream helper macro. 131// Note: Don't forget to connect it to the base suite (See: bstream.cpp => StreamCase::suite()) 132STREAM_TEST_SUBSUITE_NAMED_REGISTRATION(fileStream) 133