// Author: Mike Wetherell
// RCS-ID: $Id$
// Copyright: (c) 2004 Mike Wetherell
-// Licence: wxWidgets licence
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
//
//
// test --verbose largeFile
//
-// On systems supporting sparse files they may also be registered in the
-// Streams subsuite.
+// On systems supporting sparse files they will also be registered in the
+// Streams subsuite so that they run by default.
//
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/filename.h"
#include "wx/wfstream.h"
-#ifdef __WXMSW__
+#ifdef __WINDOWS__
#include "wx/msw/wrapwin.h"
#ifdef __VISUALC__
// 'nonstandard extension used : nameless struct/union' occurs inside
wxInputStream *LargeFileTest_wxFile::MakeInStream(const wxString& name) const
{
auto_ptr<wxFileInputStream> in(new wxFileInputStream(name));
- CPPUNIT_ASSERT(in->Ok());
+ CPPUNIT_ASSERT(in->IsOk());
return in.release();
}
wxInputStream *LargeFileTest_wxFFile::MakeInStream(const wxString& name) const
{
auto_ptr<wxFFileInputStream> in(new wxFFileInputStream(name));
- CPPUNIT_ASSERT(in->Ok());
+ CPPUNIT_ASSERT(in->IsOk());
return in.release();
}
bool LargeFileTest_wxFFile::HasLFS() const
{
-#ifdef HAVE_FSEEKO
- return (wxFileOffset)0xffffffff > 0;
+#ifdef wxHAS_LARGE_FFILES
+ return true;
#else
return false;
#endif
// Ideally these tests will be part of the default suite so that regressions
// are picked up. However this is only possible when sparse files are
// supported otherwise the tests require too much disk space.
-//
-// On unix, most filesystems support sparse files, though not all. So for now
-// I'm not assuming sparse file support on unix. On Windows it's possible to
-// test, and sparse files should be available on Win 5+ with NTFS.
-#ifdef __WXMSW__
+#ifdef __WINDOWS__
#ifndef FILE_SUPPORTS_SPARSE_FILES
#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
volumeFlags &= ~FILE_SUPPORTS_SPARSE_FILES;
}
+// return the suite if sparse files are supported, otherwise return NULL
+//
CppUnit::Test* GetlargeFileSuite()
{
if (!volumeInfoInit) {
- wxFile file;
- wxString path = wxFileName::CreateTempFileName(wxT("wxlfs-"), &file);
- MakeSparse(path, file.fd());
+ wxString path;
+ {
+ wxFile file;
+ path = wxFileName::CreateTempFileName(wxT("wxlfs-"), &file);
+ MakeSparse(path, file.fd());
+ }
wxRemoveFile(path);
}
return NULL;
}
-#else // __WXMSW__
+#else // __WINDOWS__
bool IsFAT(const wxString& WXUNUSED(path)) { return false; }
void MakeSparse(const wxString& WXUNUSED(path), int WXUNUSED(fd)) { }
-CppUnit::Test* GetlargeFileSuite() { return NULL; }
+// return the suite if sparse files are supported, otherwise return NULL
+//
+CppUnit::Test* GetlargeFileSuite()
+{
+ wxString path;
+ struct stat st1, st2;
+ memset(&st1, 0, sizeof(st1));
+ memset(&st2, 0, sizeof(st2));
+
+ {
+ wxFile file;
+ path = wxFileName::CreateTempFileName(wxT("wxlfs-"), &file);
+
+ fstat(file.fd(), &st1);
+ file.Seek(st1.st_blksize);
+ file.Write("x", 1);
+ fstat(file.fd(), &st1);
+
+ file.Seek(0);
+ file.Write("x", 1);
+ fstat(file.fd(), &st2);
+ }
+
+ wxRemoveFile(path);
+
+ if (st1.st_blocks != st2.st_blocks)
+ return largeFile::suite();
+ else
+ return NULL;
+}
-#endif // __WXMSW__
+#endif // __WINDOWS__
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(largeFile, "largeFile");
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(largeFile, "Streams.largeFile");