| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        tests/archive/archivetest.h
 
- // Purpose:     Test the archive classes
 
- // Author:      Mike Wetherell
 
- // Copyright:   (c) 2004 Mike Wetherell
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef WX_ARCHIVETEST_INCLUDED
 
- #define WX_ARCHIVETEST_INCLUDED 1
 
- #define WX_TEST_ARCHIVE_ITERATOR
 
- #include "wx/archive.h"
 
- #include "wx/wfstream.h"
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // Bit flags for options for the tests
 
- enum Options
 
- {
 
-     PipeIn      = 0x01,     // input streams are non-seekable
 
-     PipeOut     = 0x02,     // output streams are non-seekable
 
-     Stub        = 0x04,     // the archive should be appended to a stub
 
-     AllOptions  = 0x07
 
- };
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // TestOutputStream and TestInputStream are memory streams which can be
 
- // seekable or non-seekable.
 
- class TestOutputStream : public wxOutputStream
 
- {
 
- public:
 
-     TestOutputStream(int options);
 
-     ~TestOutputStream() { delete [] m_data; }
 
-     int GetOptions() const { return m_options; }
 
-     wxFileOffset GetLength() const { return m_size; }
 
-     bool IsSeekable() const { return (m_options & PipeOut) == 0; }
 
-     // gives away the data, this stream is then empty, and can be reused
 
-     void GetData(char*& data, size_t& size);
 
- private:
 
-     void Init();
 
-     wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode);
 
-     wxFileOffset OnSysTell() const;
 
-     size_t OnSysWrite(const void *buffer, size_t size);
 
-     int m_options;
 
-     size_t m_pos;
 
-     size_t m_capacity;
 
-     size_t m_size;
 
-     char *m_data;
 
- };
 
- class TestInputStream : public wxInputStream
 
- {
 
- public:
 
-     // various streams have implemented eof differently, so check the archive
 
-     // stream works with all the possibilities (bit flags that can be ORed)
 
-     enum EofTypes {
 
-         AtLast    = 0x01,   // eof before an attempt to read past the last byte
 
-         WithError = 0x02    // give an error instead of eof
 
-     };
 
-     
 
-     // ctor takes the data from the output stream, which is then empty
 
-     TestInputStream(TestOutputStream& out, int eoftype)
 
-         : m_data(NULL), m_eoftype(eoftype) { SetData(out); }
 
-     // this ctor 'dups'
 
-     TestInputStream(const TestInputStream& in);
 
-     ~TestInputStream() { delete [] m_data; }
 
-     void Rewind();
 
-     wxFileOffset GetLength() const { return m_size; }
 
-     bool IsSeekable() const { return (m_options & PipeIn) == 0; }
 
-     void SetData(TestOutputStream& out);
 
-     void Chop(size_t size) { m_size = size; }
 
-     char& operator [](size_t pos) { return m_data[pos]; }
 
- private:
 
-     wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode);
 
-     wxFileOffset OnSysTell() const;
 
-     size_t OnSysRead(void *buffer, size_t size);
 
-     int m_options;
 
-     size_t m_pos;
 
-     size_t m_size;
 
-     char *m_data;
 
-     int m_eoftype;
 
- };
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // wxFFile streams for piping to/from an external program
 
- class PFileInputStream : public wxFFileInputStream
 
- {
 
- public:
 
-     PFileInputStream(const wxString& cmd);
 
-     ~PFileInputStream();
 
- };
 
- class PFileOutputStream : public wxFFileOutputStream
 
- {
 
- public:
 
-     PFileOutputStream(const wxString& cmd);
 
-     ~PFileOutputStream();
 
- };
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // A class to hold a test entry
 
- class TestEntry
 
- {
 
- public:
 
-     TestEntry(const wxDateTime& dt, int len, const char *data);
 
-     ~TestEntry() { delete [] m_data; }
 
-     wxDateTime GetDateTime() const  { return m_dt; }
 
-     wxFileOffset GetLength() const  { return m_len; }
 
-     size_t GetSize() const          { return m_len; }
 
-     const char *GetData() const     { return m_data; }
 
-     wxString GetComment() const     { return m_comment; }
 
-     bool IsText() const             { return m_isText; }
 
-     void SetComment(const wxString& comment) { m_comment = comment; }
 
-     void SetDateTime(const wxDateTime& dt)   { m_dt = dt; }
 
- private:
 
-     wxDateTime m_dt;
 
-     size_t m_len;
 
-     char *m_data;
 
-     wxString m_comment;
 
-     bool m_isText;
 
- };
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // The test case
 
- template <class ClassFactoryT>
 
- class ArchiveTestCase : public CppUnit::TestCase
 
- {
 
- public:
 
-     ArchiveTestCase(std::string name,
 
-                     ClassFactoryT *factory,
 
-                     int options,
 
-                     const wxString& archiver = wxEmptyString,
 
-                     const wxString& unarchiver = wxEmptyString);
 
-     ~ArchiveTestCase();
 
- protected:
 
-     // the classes to test
 
-     typedef typename ClassFactoryT::entry_type     EntryT;
 
-     typedef typename ClassFactoryT::instream_type  InputStreamT;
 
-     typedef typename ClassFactoryT::outstream_type OutputStreamT;
 
-     typedef typename ClassFactoryT::notifier_type  NotifierT;
 
-     typedef typename ClassFactoryT::iter_type      IterT;
 
-     typedef typename ClassFactoryT::pairiter_type  PairIterT;
 
-     // the entry point for the test
 
-     void runTest();
 
-     // create the test data
 
-     void CreateTestData();
 
-     TestEntry& Add(const char *name, const char *data, int len = -1);
 
-     TestEntry& Add(const char *name, int len = 0, int value = EOF);
 
-     // 'archive up' the test data
 
-     void CreateArchive(wxOutputStream& out);
 
-     void CreateArchive(wxOutputStream& out, const wxString& archiver);
 
-     // perform various modifications on the archive
 
-     void ModifyArchive(wxInputStream& in, wxOutputStream& out);
 
-     // extract the archive and verify its contents
 
-     void ExtractArchive(wxInputStream& in);
 
-     void ExtractArchive(wxInputStream& in, const wxString& unarchiver);
 
-     void VerifyDir(wxString& path, size_t rootlen = 0);
 
-     // tests for the iterators
 
-     void TestIterator(wxInputStream& in);
 
-     void TestPairIterator(wxInputStream& in);
 
-     void TestSmartIterator(wxInputStream& in);
 
-     void TestSmartPairIterator(wxInputStream& in);
 
-     // try reading two entries at the same time
 
-     void ReadSimultaneous(TestInputStream& in);
 
-     // overridables
 
-     virtual void OnCreateArchive(OutputStreamT& WXUNUSED(arc)) { }
 
-     virtual void OnSetNotifier(EntryT& entry);
 
-     virtual void OnArchiveExtracted(InputStreamT& WXUNUSED(arc),
 
-                                     int WXUNUSED(expectedTotal)) { }
 
-     virtual void OnCreateEntry(     OutputStreamT& WXUNUSED(arc),
 
-                                     TestEntry& WXUNUSED(testEntry),
 
-                                     EntryT *entry = NULL) { (void)entry; }
 
-     virtual void OnEntryExtracted(  EntryT& WXUNUSED(entry),
 
-                                     const TestEntry& WXUNUSED(testEntry),
 
-                                     InputStreamT *arc = NULL) { (void)arc; }
 
-     typedef std::map<wxString, TestEntry*> TestEntries;
 
-     TestEntries m_testEntries;              // test data
 
-     std::auto_ptr<ClassFactoryT> m_factory; // factory to make classes
 
-     int m_options;                          // test options
 
-     wxDateTime m_timeStamp;                 // timestamp to give test entries
 
-     int m_id;                               // select between the possibilites
 
-     wxString m_archiver;                    // external archiver
 
-     wxString m_unarchiver;                  // external unarchiver
 
- };
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // Make ids
 
- class TestId
 
- {
 
- public:
 
-     // make a new id and return it as a string
 
-     static std::string MakeId();
 
-     // get the current id
 
-     static int GetId() { return m_seed; }
 
- private:
 
-     // seed for generating the ids
 
-     static int m_seed;
 
- };
 
- ///////////////////////////////////////////////////////////////////////////////
 
- // Base class for the archive test suites
 
- class ArchiveTestSuite : public CppUnit::TestSuite
 
- {
 
- public:
 
-     ArchiveTestSuite(std::string name);
 
- protected:
 
-     virtual ArchiveTestSuite *makeSuite();
 
-     virtual CppUnit::Test *makeTest(std::string descr,
 
-                                     int options,
 
-                                     bool genericInterface,
 
-                                     const wxString& archiver,
 
-                                     const wxString& unarchiver);
 
-     void AddArchiver(const wxString& cmd) { AddCmd(m_archivers, cmd); }
 
-     void AddUnArchiver(const wxString &cmd) { AddCmd(m_unarchivers, cmd); }
 
-     bool IsInPath(const wxString& cmd);
 
-     std::string Description(const wxString& type,
 
-                             int options,
 
-                             bool genericInterface = false,
 
-                             const wxString& archiver = wxEmptyString,
 
-                             const wxString& unarchiver = wxEmptyString);
 
- private:
 
-     wxString m_name;
 
-     wxPathList m_path;
 
-     wxArrayString m_archivers;
 
-     wxArrayString m_unarchivers;
 
-     void AddCmd(wxArrayString& cmdlist, const wxString& cmd);
 
- };
 
- #endif
 
 
  |