X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f822acceeee524d6e37fcbcaec3d795319c58d50..04b2b47a4e817fb32a78316b8b50efd0612509b9:/tests/filename/filenametest.cpp diff --git a/tests/filename/filenametest.cpp b/tests/filename/filenametest.cpp index bf584ef665..638434bc56 100644 --- a/tests/filename/filenametest.cpp +++ b/tests/filename/filenametest.cpp @@ -24,10 +24,15 @@ #include "wx/filename.h" #include "wx/filefn.h" #include "wx/stdpaths.h" +#include "wx/scopeguard.h" -#ifdef __WXMSW__ +#ifdef __WINDOWS__ #include "wx/msw/registry.h" -#endif // __WXMSW__ +#endif // __WINDOWS__ + +#ifdef __UNIX__ + #include +#endif // __UNIX__ #include "testfile.h" @@ -134,6 +139,8 @@ private: CPPUNIT_TEST( TestVolumeUniqueName ); CPPUNIT_TEST( TestCreateTempFileName ); CPPUNIT_TEST( TestGetTimes ); + CPPUNIT_TEST( TestExists ); + CPPUNIT_TEST( TestIsSame ); CPPUNIT_TEST_SUITE_END(); void TestConstruction(); @@ -151,6 +158,8 @@ private: void TestVolumeUniqueName(); void TestCreateTempFileName(); void TestGetTimes(); + void TestExists(); + void TestIsSame(); DECLARE_NO_COPY_CLASS(FileNameTestCase) }; @@ -158,7 +167,7 @@ private: // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( FileNameTestCase ); -// also include in it's own registry so that these tests can be run alone +// also include in its own registry so that these tests can be run alone CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( FileNameTestCase, "FileNameTestCase" ); void FileNameTestCase::TestConstruction() @@ -314,7 +323,7 @@ void FileNameTestCase::TestNormalize() } tests[] = { // test wxPATH_NORM_ENV_VARS -#ifdef __WXMSW__ +#ifdef __WINDOWS__ { "%ABCDEF%/g/h/i", wxPATH_NORM_ENV_VARS, "abcdef/g/h/i", wxPATH_UNIX }, #else { "$(ABCDEF)/g/h/i", wxPATH_NORM_ENV_VARS, "abcdef/g/h/i", wxPATH_UNIX }, @@ -398,7 +407,7 @@ void FileNameTestCase::TestNormalize() // and also that the registry key was changed recently and didn't take // effect yet but these are marginal cases which we consciously choose to // ignore for now) -#ifdef __WXMSW__ +#ifdef __WINDOWS__ long shortNamesDisabled; if ( wxRegKey ( @@ -412,7 +421,7 @@ void FileNameTestCase::TestNormalize() CPPUNIT_ASSERT_EQUAL( "..\\mkinstalldirs", fn.GetFullPath() ); } //else: when in doubt, don't run the test -#endif // __WXMSW__ +#endif // __WINDOWS__ } void FileNameTestCase::TestReplace() @@ -596,7 +605,7 @@ void FileNameTestCase::TestCreateTempFileName() { "foo", "$SYSTEM_TEMP", true }, { "..", "$SYSTEM_TEMP", true }, { "../bar", "..", true }, -#ifdef __WXMSW__ +#ifdef __WINDOWS__ { "$USER_DOCS_DIR\\", "$USER_DOCS_DIR", true }, { "c:\\a\\directory\\which\\does\\not\\exist", "", false }, #elif defined( __UNIX__ ) @@ -637,6 +646,7 @@ void FileNameTestCase::TestGetTimes() { wxFileName fn(wxFileName::CreateTempFileName("filenametest")); CPPUNIT_ASSERT( fn.IsOk() ); + wxON_BLOCK_EXIT1( wxRemoveFile, fn.GetFullPath() ); wxDateTime dtAccess, dtMod, dtCreate; CPPUNIT_ASSERT( fn.GetTimes(&dtAccess, &dtMod, &dtCreate) ); @@ -647,3 +657,73 @@ void FileNameTestCase::TestGetTimes() CPPUNIT_ASSERT(dtMod.IsEqualUpTo(wxDateTime::Now(), wxTimeSpan(0,1))); CPPUNIT_ASSERT(dtAccess.IsEqualUpTo(wxDateTime::Now(), wxTimeSpan(0,1))); } + +void FileNameTestCase::TestExists() +{ + wxFileName fn(wxFileName::CreateTempFileName("filenametest")); + CPPUNIT_ASSERT( fn.IsOk() ); + wxON_BLOCK_EXIT1( wxRemoveFile, fn.GetFullPath() ); + + CPPUNIT_ASSERT( fn.FileExists() ); + CPPUNIT_ASSERT( !wxFileName::DirExists(fn.GetFullPath()) ); + CPPUNIT_ASSERT( fn.Exists() ); + + wxFileName dirTemp(wxFileName::DirName(wxFileName::GetTempDir())); + CPPUNIT_ASSERT( !dirTemp.FileExists() ); + CPPUNIT_ASSERT( dirTemp.DirExists() ); + CPPUNIT_ASSERT( dirTemp.Exists() ); + +#ifdef __UNIX__ + CPPUNIT_ASSERT( !wxFileName::FileExists("/dev/null") ); + CPPUNIT_ASSERT( !wxFileName::DirExists("/dev/null") ); + CPPUNIT_ASSERT( wxFileName::Exists("/dev/null") ); +#endif // __UNIX__ +} + +void FileNameTestCase::TestIsSame() +{ + wxFileName fn1( wxFileName::CreateTempFileName( "filenametest1" ) ); + CPPUNIT_ASSERT( fn1.IsOk() ); + wxON_BLOCK_EXIT1( wxRemoveFile, fn1.GetFullPath() ); + + wxFileName fn2( wxFileName::CreateTempFileName( "filenametest2" ) ); + CPPUNIT_ASSERT( fn2.IsOk() ); + wxON_BLOCK_EXIT1( wxRemoveFile, fn2.GetFullPath() ); + + CPPUNIT_ASSERT( fn1.SameAs( fn1 ) ); + CPPUNIT_ASSERT( !fn1.SameAs( fn2 ) ); + +#if defined(__UNIX__) + // We need to create a temporary directory and a temporary link. + // Unfortunately we can't use wxFileName::CreateTempFileName() for neither + // as it creates plain files, so use tempnam() explicitly instead. + char* tn = tempnam(NULL, "wxfn1"); + const wxString tempdir1 = wxString::From8BitData(tn); + free(tn); + + CPPUNIT_ASSERT( wxFileName::Mkdir(tempdir1) ); + // Unfortunately the casts are needed to select the overload we need here. + wxON_BLOCK_EXIT2( static_cast(wxFileName::Rmdir), + tempdir1, static_cast(wxPATH_RMDIR_RECURSIVE) ); + + tn = tempnam(NULL, "wxfn2"); + const wxString tempdir2 = wxString::From8BitData(tn); + free(tn); + CPPUNIT_ASSERT_EQUAL( 0, symlink(tempdir1.c_str(), tempdir2.c_str()) ); + wxON_BLOCK_EXIT1( wxRemoveFile, tempdir2 ); + + + wxFileName fn3(tempdir1, "foo"); + wxFileName fn4(tempdir2, "foo"); + + // These files have different paths, hence are different. + CPPUNIT_ASSERT( !fn3.SameAs(fn4) ); + + // Create and close a file to trigger creating it. + wxFile(fn3.GetFullPath(), wxFile::write); + + // Now that both files do exist we should be able to detect that they are + // actually the same file. + CPPUNIT_ASSERT( fn3.SameAs(fn4) ); +#endif // __UNIX__ +}