]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied [ 856726 ] Tests for gzip streams
authorJulian Smart <julian@anthemion.co.uk>
Thu, 11 Dec 2003 11:29:52 +0000 (11:29 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 11 Dec 2003 11:29:52 +0000 (11:29 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24766 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/console/console.cpp

index 0348bc8b306ba937eb825b43a3e69c62d33cbda7..ff621318bb67357ec383e7a50191dc8166ed104c 100644 (file)
@@ -90,6 +90,7 @@
     #define TEST_WCHAR
     #define TEST_ZIP
     #define TEST_ZLIB
+    #define TEST_GZIP
 
     #undef TEST_ALL
     static const bool TEST_ALL = true;
@@ -4575,6 +4576,137 @@ static void TestZlibStreamRead()
 
 #endif // TEST_ZLIB
 
+// ----------------------------------------------------------------------------
+// Gzip streams
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_GZIP
+
+#include "wx/wfstream.h"
+#include "wx/gzstream.h"
+#include "wx/filename.h"
+#include "wx/txtstrm.h"
+
+// Reads two input streams and verifies that they are the same (and non-emtpy)
+//
+void GzipVerify(wxInputStream &in1, wxInputStream &in2)
+{
+    if (!in1 || !in2) {
+        wxPuts(_T("    Can't verify"));
+        return;
+    }
+
+    const int BUFSIZE = 8192;
+    wxCharBuffer buf1(BUFSIZE);
+    wxCharBuffer buf2(BUFSIZE);
+    bool none = true;
+    
+    for (;;) {
+        int n1 = in1.Read(buf1.data(), BUFSIZE).LastRead();
+        int n2 = in2.Read(buf2.data(), BUFSIZE).LastRead();
+
+        if (n1 != n2 || (n1 && memcmp(buf1, buf2, n1) != 0) || (!n1 && none)) {
+            wxPuts(_T("    Failure"));
+            break;
+        }
+
+        if (!n1) {
+            wxPuts(_T("    Success"));
+            break;
+        }
+
+        none = false;
+    }
+
+    while (in1.IsOk())
+        in1.Read(buf1.data(), BUFSIZE);
+    while (in2.IsOk())
+        in2.Read(buf2.data(), BUFSIZE);
+}
+
+// Write a gzip file and read it back.
+//
+void TestGzip()
+{
+    wxPuts(_T("*** Testing gzip streams ***\n"));
+
+    const wxString testname = _T("gziptest");
+    const wxString gzipname = testname + _T(".gz");
+
+    // write some random test data to a testfile
+    wxPuts(_T("Writing random test data to ") + testname + _T("..."));
+    {
+        wxFFileOutputStream outstream(testname);
+        wxTextOutputStream textout(outstream);
+
+        for (int i = 0; i < 1000 && outstream.Ok(); i++)
+            textout << rand() << rand() << rand() << rand() << endl;
+
+        wxPuts(_T("    Done"));
+    }
+
+    wxFileName fn(testname);
+    wxDateTime dt = fn.GetModificationTime();
+    wxFFileInputStream instream(testname);
+
+    // try writing a gzip file
+    wxPuts(_T("Writing ") + gzipname + _T(" using wxGzipOutputStream..."));
+    {
+        wxFFileOutputStream outstream(gzipname);
+        wxGzipOutputStream gzip(outstream, testname, dt);
+
+        if (!gzip.Write(instream))
+            wxPuts(_T("    Failure"));
+        else
+            wxPuts(_T("    Success"));
+    }
+
+    // try reading the gzip file
+    wxPuts(_T("Reading ") + gzipname + _T(" using wxGzipInputStream..."));
+    {
+        instream.SeekI(0);
+        wxFFileInputStream instream2(gzipname);
+        wxGzipInputStream gzip(instream2);
+        GzipVerify(instream, gzip);
+
+        if (gzip.GetName() != fn.GetFullName())
+            wxPuts(gzipname + _T(" contains incorrect filename: ")
+                    + gzip.GetName());
+        if (dt.IsValid() && gzip.GetDateTime() != dt)
+            wxPuts(gzipname + _T(" contains incorrect timestamp: ")
+                    + gzip.GetDateTime().Format());
+    }
+
+#ifdef __UNIX__
+    // then verify it using gzip program if it is in the path
+    wxPuts(_T("Reading ") + gzipname + _T(" using gzip program..."));
+    wxFFile file(popen((_T("gzip -d -c ") + gzipname).mb_str(), "r"));
+    if (file.fp()) {
+        wxFFileInputStream instream2(file);
+        instream.SeekI(0);
+        GzipVerify(instream, instream2);
+        pclose(file.fp());
+        file.Detach();
+    }
+
+    // try reading a gzip created by gzip program
+    wxPuts(_T("Reading output of gzip program using wxGzipInputStream..."));
+    file.Attach(popen((_T("gzip -c ") + testname).mb_str(), "r"));
+    if (file.fp()) {
+        wxFFileInputStream instream2(file);
+        wxGzipInputStream gzip(instream2);
+        instream.SeekI(0);
+        GzipVerify(instream, gzip);
+        pclose(file.fp());
+        file.Detach();
+    }
+#endif
+
+    wxPuts(_T("\n--- Done gzip streams ---"));
+}
+
+#endif // TEST_GZIP
+
 // ----------------------------------------------------------------------------
 // date time
 // ----------------------------------------------------------------------------
@@ -7494,6 +7626,10 @@ int main(int argc, char **argv)
     TestZlibStreamRead();
 #endif // TEST_ZLIB
 
+#ifdef TEST_GZIP
+    TestGzip();
+#endif
+
     return 0;
 }