]> git.saurik.com Git - wxWidgets.git/blobdiff - tests/filename/filenametest.cpp
Create wxStaticBoxSizer elements as children of wxStaticBox in XRC.
[wxWidgets.git] / tests / filename / filenametest.cpp
index a45a5db035182cdc92af6233e989d9905f5e3582..addf9ad49ff9e024930379c7959aa9020afac24f 100644 (file)
 #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 <unistd.h>
+#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 },
@@ -322,8 +331,11 @@ void FileNameTestCase::TestNormalize()
 
         // test wxPATH_NORM_DOTS
         { "a/.././b/c/../../", wxPATH_NORM_DOTS, "", wxPATH_UNIX },
-        { "./", wxPATH_NORM_DOTS, "", wxPATH_UNIX },
-        { "b/../", wxPATH_NORM_DOTS, "", wxPATH_UNIX },
+        { "", wxPATH_NORM_DOTS, "", wxPATH_UNIX },
+        { "./foo", wxPATH_NORM_DOTS, "foo", wxPATH_UNIX },
+        { "b/../bar", wxPATH_NORM_DOTS, "bar", wxPATH_UNIX },
+        { "c/../../quux", wxPATH_NORM_DOTS, "../quux", wxPATH_UNIX },
+        { "/c/../../quux", wxPATH_NORM_DOTS, "/quux", wxPATH_UNIX },
 
         // test wxPATH_NORM_TILDE: notice that ~ is only interpreted specially
         // when it is the first character in the file name
@@ -395,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
          (
@@ -409,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()
@@ -593,10 +605,10 @@ 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 },
-#else if defined( __UNIX__ )
+#elif defined( __UNIX__ )
         { "$USER_DOCS_DIR/", "$USER_DOCS_DIR", true },
         { "/tmp/foo", "/tmp", true },
         { "/tmp/a/directory/which/does/not/exist", "", false },
@@ -634,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) );
@@ -644,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<bool (*)(const wxString&, int)>(wxFileName::Rmdir),
+                      tempdir1, static_cast<int>(wxPATH_RMDIR_RECURSIVE) );
+
+    tn = tempnam(NULL, "wxfn2");
+    const wxString tempdir2 = wxString::From8BitData(tn);
+    free(tn);
+    CPPUNIT_ASSERT_EQUAL( 0, symlink(tempdir1, tempdir2) );
+    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__
+}