]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/console/console.cpp
fix sizing of extra control
[wxWidgets.git] / samples / console / console.cpp
index fd27e29a1b6f4d59cc2eb18c9a94ebd75fbb1f2f..ce887b1a5904ff1383290a04df68751d8748d9f6 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        samples/console/console.cpp
-// Purpose:     a sample console (as opposed to GUI) progam using wxWidgets
+// Purpose:     A sample console (as opposed to GUI) program using wxWidgets
 // Author:      Vadim Zeitlin
 // Modified by:
 // Created:     04.10.99
@@ -25,6 +25,9 @@
 #include "wx/file.h"
 #include "wx/app.h"
 #include "wx/log.h"
+#include "wx/apptrait.h"
+#include "wx/platinfo.h"
+#include "wx/wxchar.h"
 
 // without this pragma, the stupid compiler precompiles #defines below so that
 // changing them doesn't "take place" later!
 
 // what to test (in alphabetic order)? Define TEST_ALL to 0 to do a single
 // test, define it to 1 to do all tests.
-#define TEST_ALL 0
+#define TEST_ALL 1
 
 
 #if TEST_ALL
-
     #define TEST_CMDLINE
     #define TEST_DATETIME
     #define TEST_DIR
-    #define TEST_DLLLOADER
+    #define TEST_DYNLIB
     #define TEST_ENVIRON
     #define TEST_EXECUTE
     #define TEST_FILE
     #define TEST_FILENAME
     #define TEST_FILETIME
  //   #define TEST_FTP  --FIXME! (RN)
-    #define TEST_HASHMAP
-    #define TEST_HASHSET
     #define TEST_INFO_FUNCTIONS
-    #define TEST_LIST
     #define TEST_LOCALE
     #define TEST_LOG
     #define TEST_MIME
+    #define TEST_MODULE
     #define TEST_PATHLIST
-    #define TEST_ODBC
     #define TEST_PRINTF
     #define TEST_REGCONF
     #define TEST_REGEX
@@ -78,6 +77,8 @@
     #define TEST_SCOPEGUARD
     #define TEST_SNGLINST
 //    #define TEST_SOCKETS  --FIXME! (RN)
+    #define TEST_STACKWALKER
+    #define TEST_STDPATHS
     #define TEST_STREAMS
     #define TEST_TEXTSTREAM
     #define TEST_THREADS
 //    #define TEST_VOLUME   --FIXME! (RN)
     #define TEST_WCHAR
     #define TEST_ZIP
-
 #else // #if TEST_ALL
-
-    #define TEST_DATETIME
-
+    #define TEST_EXECUTE
 #endif
 
 // some tests are interactive, define this to run them
     #define TEST_INTERACTIVE 0
 #endif
 
-// ----------------------------------------------------------------------------
-// test class for container objects
-// ----------------------------------------------------------------------------
-
-#if defined(TEST_LIST)
-
-class Bar // Foo is already taken in the hash test
-{
-public:
-    Bar(const wxString& name) : m_name(name) { ms_bars++; }
-    Bar(const Bar& bar) : m_name(bar.m_name) { ms_bars++; }
-   ~Bar() { ms_bars--; }
-
-   static size_t GetNumber() { return ms_bars; }
-
-   const wxChar *GetName() const { return m_name; }
-
-private:
-   wxString m_name;
-
-   static size_t ms_bars;
-};
-
-size_t Bar::ms_bars = 0;
-
-#endif // defined(TEST_LIST)
-
 // ============================================================================
 // implementation
 // ============================================================================
@@ -165,7 +136,7 @@ static wxString MakePrintable(const wxChar *s)
 
 static void ShowCmdLine(const wxCmdLineParser& parser)
 {
-    wxString s = _T("Input files: ");
+    wxString s = _T("Command line parsed successfully:\nInput files: ");
 
     size_t count = parser.GetParamCount();
     for ( size_t param = 0; param < count; param++ )
@@ -179,6 +150,7 @@ static void ShowCmdLine(const wxCmdLineParser& parser)
 
     wxString strVal;
     long lVal;
+    double dVal;
     wxDateTime dt;
     if ( parser.Found(_T("o"), &strVal) )
         s << _T("Output file:\t") << strVal << '\n';
@@ -186,6 +158,8 @@ static void ShowCmdLine(const wxCmdLineParser& parser)
         s << _T("Input dir:\t") << strVal << '\n';
     if ( parser.Found(_T("s"), &lVal) )
         s << _T("Size:\t") << lVal << '\n';
+    if ( parser.Found(_T("f"), &dVal) )
+        s << _T("Double:\t") << dVal << '\n';
     if ( parser.Found(_T("d"), &dt) )
         s << _T("Date:\t") << dt.FormatISODate() << '\n';
     if ( parser.Found(_T("project_name"), &strVal) )
@@ -233,7 +207,7 @@ static void TestCmdLineConvert()
 #ifdef __UNIX__
     static const wxChar *ROOTDIR = _T("/");
     static const wxChar *TESTDIR = _T("/usr/local/share");
-#elif defined(__WXMSW__)
+#elif defined(__WXMSW__) || defined(__DOS__) || defined(__OS2__)
     static const wxChar *ROOTDIR = _T("c:\\");
     static const wxChar *TESTDIR = _T("d:\\");
 #else
@@ -260,6 +234,8 @@ static void TestDirEnumHelper(wxDir& dir,
     wxPuts(wxEmptyString);
 }
 
+#if TEST_ALL
+
 static void TestDirEnum()
 {
     wxPuts(_T("*** Testing wxDir::GetFirst/GetNext ***"));
@@ -315,6 +291,8 @@ static void TestDirEnum()
     TestDirEnumHelper(dirNo);
 }
 
+#endif // TEST_ALL
+
 class DirPrintTraverser : public wxDirTraverser
 {
 public:
@@ -365,6 +343,8 @@ static void TestDirTraverse()
     dir.Traverse(traverser, wxEmptyString, wxDIR_DIRS | wxDIR_HIDDEN);
 }
 
+#if TEST_ALL
+
 static void TestDirExists()
 {
     wxPuts(_T("*** Testing wxDir::Exists() ***"));
@@ -398,13 +378,15 @@ static void TestDirExists()
     }
 }
 
+#endif // TEST_ALL
+
 #endif // TEST_DIR
 
 // ----------------------------------------------------------------------------
 // wxDllLoader
 // ----------------------------------------------------------------------------
 
-#ifdef TEST_DLLLOADER
+#ifdef TEST_DYNLIB
 
 #include "wx/dynlib.h"
 
@@ -415,13 +397,13 @@ static void TestDllLoad()
     static const wxChar *FUNC_NAME = _T("lstrlenA");
 #elif defined(__UNIX__)
     // weird: using just libc.so does *not* work!
-    static const wxChar *LIB_NAME = _T("/lib/libc-2.0.7.so");
+    static const wxChar *LIB_NAME = _T("/lib/libc.so.6");
     static const wxChar *FUNC_NAME = _T("strlen");
 #else
     #error "don't know how to test wxDllLoader on this platform"
 #endif
 
-    wxPuts(_T("*** testing wxDllLoader ***\n"));
+    wxPuts(_T("*** testing basic wxDynamicLibrary functions ***\n"));
 
     wxDynamicLibrary lib(LIB_NAME);
     if ( !lib.IsLoaded() )
@@ -430,7 +412,7 @@ static void TestDllLoad()
     }
     else
     {
-        typedef int (*wxStrlenType)(const char *);
+        typedef int (wxSTDCALL *wxStrlenType)(const char *);
         wxStrlenType pfnStrlen = (wxStrlenType)lib.GetSymbol(FUNC_NAME);
         if ( !pfnStrlen )
         {
@@ -439,6 +421,9 @@ static void TestDllLoad()
         }
         else
         {
+            wxPrintf(_T("Calling %s dynamically loaded from %s "),
+                     FUNC_NAME, LIB_NAME);
+
             if ( pfnStrlen("foo") != 3 )
             {
                 wxPrintf(_T("ERROR: loaded function is not wxStrlen()!\n"));
@@ -448,10 +433,58 @@ static void TestDllLoad()
                 wxPuts(_T("... ok"));
             }
         }
+
+#ifdef __WXMSW__
+        static const wxChar *FUNC_NAME_AW = _T("lstrlen");
+
+        typedef int (wxSTDCALL *wxStrlenTypeAorW)(const wxChar *);
+        wxStrlenTypeAorW
+            pfnStrlenAorW = (wxStrlenTypeAorW)lib.GetSymbolAorW(FUNC_NAME_AW);
+        if ( !pfnStrlenAorW )
+        {
+            wxPrintf(_T("ERROR: function '%s' wasn't found in '%s'.\n"),
+                     FUNC_NAME_AW, LIB_NAME);
+        }
+        else
+        {
+            if ( pfnStrlenAorW(_T("foobar")) != 6 )
+            {
+                wxPrintf(_T("ERROR: loaded function is not wxStrlen()!\n"));
+            }
+        }
+#endif // __WXMSW__
     }
 }
 
-#endif // TEST_DLLLOADER
+#if defined(__WXMSW__) || defined(__UNIX__)
+
+static void TestDllListLoaded()
+{
+    wxPuts(_T("*** testing wxDynamicLibrary::ListLoaded() ***\n"));
+
+    puts("\nLoaded modules:");
+    wxDynamicLibraryDetailsArray dlls = wxDynamicLibrary::ListLoaded();
+    const size_t count = dlls.GetCount();
+    for ( size_t n = 0; n < count; ++n )
+    {
+        const wxDynamicLibraryDetails& details = dlls[n];
+        printf("%-45s", (const char *)details.GetPath().mb_str());
+
+        void *addr;
+        size_t len;
+        if ( details.GetAddress(&addr, &len) )
+        {
+            printf(" %08lx:%08lx",
+                   (unsigned long)addr, (unsigned long)((char *)addr + len));
+        }
+
+        printf(" %s\n", (const char *)details.GetVersion().mb_str());
+    }
+}
+
+#endif
+
+#endif // TEST_DYNLIB
 
 // ----------------------------------------------------------------------------
 // wxGet/SetEnv
@@ -503,11 +536,13 @@ static void TestExecute()
     wxPuts(_T("*** testing wxExecute ***"));
 
 #ifdef __UNIX__
-    #define COMMAND "cat -n ../../Makefile" // "echo hi"
+    #define COMMAND "echo hi"
+    #define ASYNC_COMMAND "xclock"
     #define SHELL_COMMAND "echo hi from shell"
-    #define REDIRECT_COMMAND COMMAND // "date"
+    #define REDIRECT_COMMAND "cat -n Makefile"
 #elif defined(__WXMSW__)
     #define COMMAND "command.com /c echo hi"
+    #define ASYNC_COMMAND "notepad"
     #define SHELL_COMMAND "echo hi"
     #define REDIRECT_COMMAND COMMAND
 #else
@@ -523,19 +558,22 @@ static void TestExecute()
 
     wxPrintf(_T("Testing wxExecute: "));
     fflush(stdout);
-    if ( wxExecute(_T(COMMAND), true /* sync */) == 0 )
+    if ( wxExecute(_T(COMMAND), wxEXEC_SYNC) == 0 )
         wxPuts(_T("Ok."));
     else
         wxPuts(_T("ERROR."));
 
-#if 0 // no, it doesn't work (yet?)
     wxPrintf(_T("Testing async wxExecute: "));
     fflush(stdout);
-    if ( wxExecute(COMMAND) != 0 )
+    int pid = wxExecute(ASYNC_COMMAND);
+    if ( pid != 0 )
+    {
         wxPuts(_T("Ok (command launched)."));
+        if ( wxKill(pid) == -1 )
+            wxPuts("ERROR: failed to kill child process.");
+    }
     else
         wxPuts(_T("ERROR."));
-#endif // 0
 
     wxPrintf(_T("Testing wxExecute with redirection:\n"));
     wxArrayString output;
@@ -545,10 +583,25 @@ static void TestExecute()
     }
     else
     {
-        size_t count = output.GetCount();
-        for ( size_t n = 0; n < count; n++ )
+        // don't show too much output, MAX_LINES is enough
+        static const unsigned MAX_LINES = 20;
+
+        const unsigned count = output.size();
+        for ( unsigned n = 0;
+              n < (count > MAX_LINES ? MAX_LINES/2 : count);
+              n++ )
+        {
+            wxPrintf("%04u:\t%s\n", n + 1, output[n]);
+        }
+
+        if ( count > MAX_LINES )
         {
-            wxPrintf(_T("\t%s\n"), output[n].c_str());
+            wxPrintf("... skipping %u lines...\n", count - MAX_LINES);
+
+            for ( unsigned n = count - MAX_LINES/2; n < count; n++ )
+            {
+                wxPrintf("%04u:\t%s\n", n + 1, output[n]);
+            }
         }
 
         wxPuts(_T("Ok."));
@@ -578,12 +631,12 @@ static void TestFileRead()
 
         wxPuts(_T("File dump:\n----------"));
 
-        static const off_t len = 1024;
+        static const size_t len = 1024;
         wxChar buf[len];
         for ( ;; )
         {
-            off_t nRead = file.Read(buf, len);
-            if ( nRead == wxInvalidOffset )
+            size_t nRead = file.Read(buf, len);
+            if ( nRead == (size_t)wxInvalidOffset )
             {
                 wxPrintf(_T("Failed to read the file."));
                 break;
@@ -690,6 +743,24 @@ static void TestFileCopy()
     wxPuts(wxEmptyString);
 }
 
+static void TestTempFile()
+{
+    wxPuts(_T("*** wxTempFile test ***"));
+
+    wxTempFile tmpFile;
+    if ( tmpFile.Open(_T("test2")) && tmpFile.Write(_T("the answer is 42")) )
+    {
+        if ( tmpFile.Commit() )
+            wxPuts(_T("File committed."));
+        else
+            wxPuts(_T("ERROR: could't commit temp file."));
+
+        wxRemoveFile(_T("test2"));
+    }
+
+    wxPuts(wxEmptyString);
+}
+
 #endif // TEST_FILE
 
 // ----------------------------------------------------------------------------
@@ -804,116 +875,6 @@ static void DumpFileName(const wxChar *desc, const wxFileName& fn)
 }
 #endif
 
-static struct FileNameInfo
-{
-    const wxChar *fullname;
-    const wxChar *volume;
-    const wxChar *path;
-    const wxChar *name;
-    const wxChar *ext;
-    bool isAbsolute;
-    wxPathFormat format;
-} filenames[] =
-{
-    // Unix file names
-    { _T("/usr/bin/ls"), _T(""), _T("/usr/bin"), _T("ls"), _T(""), true, wxPATH_UNIX },
-    { _T("/usr/bin/"), _T(""), _T("/usr/bin"), _T(""), _T(""), true, wxPATH_UNIX },
-    { _T("~/.zshrc"), _T(""), _T("~"), _T(".zshrc"), _T(""), true, wxPATH_UNIX },
-    { _T("../../foo"), _T(""), _T("../.."), _T("foo"), _T(""), false, wxPATH_UNIX },
-    { _T("foo.bar"), _T(""), _T(""), _T("foo"), _T("bar"), false, wxPATH_UNIX },
-    { _T("~/foo.bar"), _T(""), _T("~"), _T("foo"), _T("bar"), true, wxPATH_UNIX },
-    { _T("/foo"), _T(""), _T("/"), _T("foo"), _T(""), true, wxPATH_UNIX },
-    { _T("Mahogany-0.60/foo.bar"), _T(""), _T("Mahogany-0.60"), _T("foo"), _T("bar"), false, wxPATH_UNIX },
-    { _T("/tmp/wxwin.tar.bz"), _T(""), _T("/tmp"), _T("wxwin.tar"), _T("bz"), true, wxPATH_UNIX },
-
-    // Windows file names
-    { _T("foo.bar"), _T(""), _T(""), _T("foo"), _T("bar"), false, wxPATH_DOS },
-    { _T("\\foo.bar"), _T(""), _T("\\"), _T("foo"), _T("bar"), false, wxPATH_DOS },
-    { _T("c:foo.bar"), _T("c"), _T(""), _T("foo"), _T("bar"), false, wxPATH_DOS },
-    { _T("c:\\foo.bar"), _T("c"), _T("\\"), _T("foo"), _T("bar"), true, wxPATH_DOS },
-    { _T("c:\\Windows\\command.com"), _T("c"), _T("\\Windows"), _T("command"), _T("com"), true, wxPATH_DOS },
-    { _T("\\\\server\\foo.bar"), _T("server"), _T("\\"), _T("foo"), _T("bar"), true, wxPATH_DOS },
-    { _T("\\\\server\\dir\\foo.bar"), _T("server"), _T("\\dir"), _T("foo"), _T("bar"), true, wxPATH_DOS },
-
-    // wxFileName support for Mac file names is broken currently
-#if 0
-    // Mac file names
-    { _T("Volume:Dir:File"), _T("Volume"), _T("Dir"), _T("File"), _T(""), true, wxPATH_MAC },
-    { _T("Volume:Dir:Subdir:File"), _T("Volume"), _T("Dir:Subdir"), _T("File"), _T(""), true, wxPATH_MAC },
-    { _T("Volume:"), _T("Volume"), _T(""), _T(""), _T(""), true, wxPATH_MAC },
-    { _T(":Dir:File"), _T(""), _T("Dir"), _T("File"), _T(""), false, wxPATH_MAC },
-    { _T(":File.Ext"), _T(""), _T(""), _T("File"), _T(".Ext"), false, wxPATH_MAC },
-    { _T("File.Ext"), _T(""), _T(""), _T("File"), _T(".Ext"), false, wxPATH_MAC },
-#endif // 0
-
-    // VMS file names
-    { _T("device:[dir1.dir2.dir3]file.txt"), _T("device"), _T("dir1.dir2.dir3"), _T("file"), _T("txt"), true, wxPATH_VMS },
-    { _T("file.txt"), _T(""), _T(""), _T("file"), _T("txt"), false, wxPATH_VMS },
-};
-
-static void TestFileNameConstruction()
-{
-    wxPuts(_T("*** testing wxFileName construction ***"));
-
-    for ( size_t n = 0; n < WXSIZEOF(filenames); n++ )
-    {
-        const FileNameInfo& fni = filenames[n];
-
-        wxFileName fn(fni.fullname, fni.format);
-
-        wxString fullname = fn.GetFullPath(fni.format);
-        if ( fullname != fni.fullname )
-        {
-            wxPrintf(_T("ERROR: fullname should be '%s'\n"), fni.fullname);
-        }
-
-        bool isAbsolute = fn.IsAbsolute(fni.format);
-        wxPrintf(_T("'%s' is %s (%s)\n\t"),
-               fullname.c_str(),
-               isAbsolute ? "absolute" : "relative",
-               isAbsolute == fni.isAbsolute ? "ok" : "ERROR");
-
-        if ( !fn.Normalize(wxPATH_NORM_ALL, wxEmptyString, fni.format) )
-        {
-            wxPuts(_T("ERROR (couldn't be normalized)"));
-        }
-        else
-        {
-            wxPrintf(_T("normalized: '%s'\n"), fn.GetFullPath(fni.format).c_str());
-        }
-    }
-
-    wxPuts(wxEmptyString);
-}
-
-static void TestFileNameSplit()
-{
-    wxPuts(_T("*** testing wxFileName splitting ***"));
-
-    for ( size_t n = 0; n < WXSIZEOF(filenames); n++ )
-    {
-        const FileNameInfo& fni = filenames[n];
-        wxString volume, path, name, ext;
-        wxFileName::SplitPath(fni.fullname,
-                              &volume, &path, &name, &ext, fni.format);
-
-        wxPrintf(_T("%s -> volume = '%s', path = '%s', name = '%s', ext = '%s'"),
-               fni.fullname,
-               volume.c_str(), path.c_str(), name.c_str(), ext.c_str());
-
-        if ( volume != fni.volume )
-            wxPrintf(_T(" (ERROR: volume = '%s')"), fni.volume);
-        if ( path != fni.path )
-            wxPrintf(_T(" (ERROR: path = '%s')"), fni.path);
-        if ( name != fni.name )
-            wxPrintf(_T(" (ERROR: name = '%s')"), fni.name);
-        if ( ext != fni.ext )
-            wxPrintf(_T(" (ERROR: ext = '%s')"), fni.ext);
-
-        wxPuts(wxEmptyString);
-    }
-}
-
 static void TestFileNameTemp()
 {
     wxPuts(_T("*** testing wxFileName temp file creation ***"));
@@ -952,70 +913,6 @@ static void TestFileNameTemp()
     }
 }
 
-static void TestFileNameMakeRelative()
-{
-    wxPuts(_T("*** testing wxFileName::MakeRelativeTo() ***"));
-
-    for ( size_t n = 0; n < WXSIZEOF(filenames); n++ )
-    {
-        const FileNameInfo& fni = filenames[n];
-
-        wxFileName fn(fni.fullname, fni.format);
-
-        // choose the base dir of the same format
-        wxString base;
-        switch ( fni.format )
-        {
-            case wxPATH_UNIX:
-                base = _T("/usr/bin/");
-                break;
-
-            case wxPATH_DOS:
-                base = _T("c:\\");
-                break;
-
-            case wxPATH_MAC:
-            case wxPATH_VMS:
-                // TODO: I don't know how this is supposed to work there
-                continue;
-
-            case wxPATH_NATIVE: // make gcc happy
-            default:
-                wxFAIL_MSG( _T("unexpected path format") );
-        }
-
-        wxPrintf(_T("'%s' relative to '%s': "),
-               fn.GetFullPath(fni.format).c_str(), base.c_str());
-
-        if ( !fn.MakeRelativeTo(base, fni.format) )
-        {
-            wxPuts(_T("unchanged"));
-        }
-        else
-        {
-            wxPrintf(_T("'%s'\n"), fn.GetFullPath(fni.format).c_str());
-        }
-    }
-}
-
-static void TestFileNameMakeAbsolute()
-{
-    wxPuts(_T("*** testing wxFileName::MakeAbsolute() ***"));
-
-    for ( size_t n = 0; n < WXSIZEOF(filenames); n++ )
-    {
-        const FileNameInfo& fni = filenames[n];
-        wxFileName fn(fni.fullname, fni.format);
-
-        wxPrintf(_T("'%s' absolutized: "),
-               fn.GetFullPath(fni.format).c_str());
-        fn.MakeAbsolute();
-        wxPrintf(_T("'%s'\n"), fn.GetFullPath(fni.format).c_str());
-    }
-
-    wxPuts(wxEmptyString);
-}
-
 static void TestFileNameDirManip()
 {
     // TODO: test AppendDir(), RemoveDir(), ...
@@ -1044,8 +941,8 @@ static void TestFileNameCwd()
 
 #ifdef TEST_FILETIME
 
-#include <wx/filename.h>
-#include <wx/datetime.h>
+#include "wx/filename.h"
+#include "wx/datetime.h"
 
 static void TestFileGetTimes()
 {
@@ -1072,394 +969,14 @@ static void TestFileSetTimes()
 {
     wxFileName fn(_T("testdata.fc"));
 
-    if ( !fn.Touch() )
-    {
-        wxPrintf(_T("ERROR: Touch() failed.\n"));
-    }
-}
-#endif
-
-#endif // TEST_FILETIME
-
-// ----------------------------------------------------------------------------
-// wxHashMap
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_HASHMAP
-
-#include "wx/hashmap.h"
-
-// test compilation of basic map types
-WX_DECLARE_HASH_MAP( int*, int*, wxPointerHash, wxPointerEqual, myPtrHashMap );
-WX_DECLARE_HASH_MAP( long, long, wxIntegerHash, wxIntegerEqual, myLongHashMap );
-WX_DECLARE_HASH_MAP( unsigned long, unsigned, wxIntegerHash, wxIntegerEqual,
-                     myUnsignedHashMap );
-WX_DECLARE_HASH_MAP( unsigned int, unsigned, wxIntegerHash, wxIntegerEqual,
-                     myTestHashMap1 );
-WX_DECLARE_HASH_MAP( int, unsigned, wxIntegerHash, wxIntegerEqual,
-                     myTestHashMap2 );
-WX_DECLARE_HASH_MAP( short, unsigned, wxIntegerHash, wxIntegerEqual,
-                     myTestHashMap3 );
-WX_DECLARE_HASH_MAP( unsigned short, unsigned, wxIntegerHash, wxIntegerEqual,
-                     myTestHashMap4 );
-
-// same as:
-// WX_DECLARE_HASH_MAP( wxString, wxString, wxStringHash, wxStringEqual,
-//                      myStringHashMap );
-WX_DECLARE_STRING_HASH_MAP(wxString, myStringHashMap);
-
-typedef myStringHashMap::iterator Itor;
-
-static void TestHashMap()
-{
-    wxPuts(_T("*** Testing wxHashMap ***\n"));
-    myStringHashMap sh(0); // as small as possible
-    wxString buf;
-    size_t i;
-    const size_t count = 10000;
-
-    // init with some data
-    for( i = 0; i < count; ++i )
-    {
-        buf.Printf(wxT("%d"), i );
-        sh[buf] = wxT("A") + buf + wxT("C");
-    }
-
-    // test that insertion worked
-    if( sh.size() != count )
-    {
-        wxPrintf(_T("*** ERROR: %u ELEMENTS, SHOULD BE %u ***\n"), sh.size(), count);
-    }
-
-    for( i = 0; i < count; ++i )
-    {
-        buf.Printf(wxT("%d"), i );
-        if( sh[buf] != wxT("A") + buf + wxT("C") )
-        {
-            wxPrintf(_T("*** ERROR INSERTION BROKEN! STOPPING NOW! ***\n"));
-            return;
-        }
-    }
-
-    // check that iterators work
-    Itor it;
-    for( i = 0, it = sh.begin(); it != sh.end(); ++it, ++i )
-    {
-        if( i == count )
-        {
-            wxPrintf(_T("*** ERROR ITERATORS DO NOT TERMINATE! STOPPING NOW! ***\n"));
-            return;
-        }
-
-        if( it->second != sh[it->first] )
-        {
-            wxPrintf(_T("*** ERROR ITERATORS BROKEN! STOPPING NOW! ***\n"));
-            return;
-        }
-    }
-
-    if( sh.size() != i )
-    {
-        wxPrintf(_T("*** ERROR: %u ELEMENTS ITERATED, SHOULD BE %u ***\n"), i, count);
-    }
-
-    // test copy ctor, assignment operator
-    myStringHashMap h1( sh ), h2( 0 );
-    h2 = sh;
-
-    for( i = 0, it = sh.begin(); it != sh.end(); ++it, ++i )
-    {
-        if( h1[it->first] != it->second )
-        {
-            wxPrintf(_T("*** ERROR: COPY CTOR BROKEN %s ***\n"), it->first.c_str());
-        }
-
-        if( h2[it->first] != it->second )
-        {
-            wxPrintf(_T("*** ERROR: OPERATOR= BROKEN %s ***\n"), it->first.c_str());
-        }
-    }
-
-    // other tests
-    for( i = 0; i < count; ++i )
-    {
-        buf.Printf(wxT("%d"), i );
-        size_t sz = sh.size();
-
-        // test find() and erase(it)
-        if( i < 100 )
-        {
-            it = sh.find( buf );
-            if( it != sh.end() )
-            {
-                sh.erase( it );
-
-                if( sh.find( buf ) != sh.end() )
-                {
-                    wxPrintf(_T("*** ERROR: FOUND DELETED ELEMENT %u ***\n"), i);
-                }
-            }
-            else
-                wxPrintf(_T("*** ERROR: CANT FIND ELEMENT %u ***\n"), i);
-        }
-        else
-        // test erase(key)
-        {
-            size_t c = sh.erase( buf );
-            if( c != 1 )
-                wxPrintf(_T("*** ERROR: SHOULD RETURN 1 ***\n"));
-
-            if( sh.find( buf ) != sh.end() )
-            {
-                wxPrintf(_T("*** ERROR: FOUND DELETED ELEMENT %u ***\n"), i);
-            }
-        }
-
-        // count should decrease
-        if( sh.size() != sz - 1 )
-        {
-            wxPrintf(_T("*** ERROR: COUNT DID NOT DECREASE ***\n"));
-        }
-    }
-
-    wxPrintf(_T("*** Finished testing wxHashMap ***\n"));
-}
-
-#endif // TEST_HASHMAP
-
-// ----------------------------------------------------------------------------
-// wxHashSet
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_HASHSET
-
-#include "wx/hashset.h"
-
-// test compilation of basic map types
-WX_DECLARE_HASH_SET( int*, wxPointerHash, wxPointerEqual, myPtrHashSet );
-WX_DECLARE_HASH_SET( long, wxIntegerHash, wxIntegerEqual, myLongHashSet );
-WX_DECLARE_HASH_SET( unsigned long, wxIntegerHash, wxIntegerEqual,
-                     myUnsignedHashSet );
-WX_DECLARE_HASH_SET( unsigned int, wxIntegerHash, wxIntegerEqual,
-                     myTestHashSet1 );
-WX_DECLARE_HASH_SET( int, wxIntegerHash, wxIntegerEqual,
-                     myTestHashSet2 );
-WX_DECLARE_HASH_SET( short, wxIntegerHash, wxIntegerEqual,
-                     myTestHashSet3 );
-WX_DECLARE_HASH_SET( unsigned short, wxIntegerHash, wxIntegerEqual,
-                     myTestHashSet4 );
-WX_DECLARE_HASH_SET( wxString, wxStringHash, wxStringEqual,
-                     myTestHashSet5 );
-
-struct MyStruct
-{
-    int* ptr;
-    wxString str;
-};
-
-class MyHash
-{
-public:
-    unsigned long operator()(const MyStruct& s) const
-        { return m_dummy(s.ptr); }
-    MyHash& operator=(const MyHash&) { return *this; }
-private:
-    wxPointerHash m_dummy;
-};
-
-class MyEqual
-{
-public:
-    bool operator()(const MyStruct& s1, const MyStruct& s2) const
-        { return s1.ptr == s2.ptr; }
-    MyEqual& operator=(const MyEqual&) { return *this; }
-};
-
-WX_DECLARE_HASH_SET( MyStruct, MyHash, MyEqual, mySet );
-
-typedef myTestHashSet5 wxStringHashSet;
-
-static void TestHashSet()
-{
-    wxPrintf(_T("*** Testing wxHashSet ***\n"));
-
-    wxStringHashSet set1;
-
-    set1.insert( _T("abc") );
-    set1.insert( _T("bbc") );
-    set1.insert( _T("cbc") );
-    set1.insert( _T("abc") );
-
-    if( set1.size() != 3 )
-        wxPrintf(_T("*** ERROR IN INSERT ***\n"));
-
-    mySet set2;
-    int dummy;
-    MyStruct tmp;
-
-    tmp.ptr = &dummy; tmp.str = _T("ABC");
-    set2.insert( tmp );
-    tmp.ptr = &dummy + 1;
-    set2.insert( tmp );
-    tmp.ptr = &dummy; tmp.str = _T("CDE");
-    set2.insert( tmp );
-
-    if( set2.size() != 2 )
-        wxPrintf(_T("*** ERROR IN INSERT - 2 ***\n"));
-
-    mySet::iterator it = set2.find( tmp );
-
-    if( it == set2.end() )
-        wxPrintf(_T("*** ERROR IN FIND - 1 ***\n"));
-    if( it->ptr != &dummy )
-        wxPrintf(_T("*** ERROR IN FIND - 2 ***\n"));
-    if( it->str != _T("ABC") )
-        wxPrintf(_T("*** ERROR IN INSERT - 3 ***\n"));
-
-    wxPrintf(_T("*** Finished testing wxHashSet ***\n"));
-}
-
-#endif // TEST_HASHSET
-
-// ----------------------------------------------------------------------------
-// wxList
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_LIST
-
-#include "wx/list.h"
-
-WX_DECLARE_LIST(Bar, wxListBars);
-#include "wx/listimpl.cpp"
-WX_DEFINE_LIST(wxListBars);
-
-WX_DECLARE_LIST(int, wxListInt);
-WX_DEFINE_LIST(wxListInt);
-
-static void TestList()
-{
-    wxPuts(_T("*** Testing wxList operations ***\n"));
-    {
-        wxListInt list1;
-        int dummy[5];
-        int i;
-
-        for ( i = 0; i < 5; ++i )
-            list1.Append(dummy + i);
-
-        if ( list1.GetCount() != 5 )
-            wxPuts(_T("Wrong number of items in list\n"));
-
-        if ( list1.Item(3)->GetData() != dummy + 3 )
-            wxPuts(_T("Error in Item()\n"));
-
-        if ( !list1.Find(dummy + 4) )
-            wxPuts(_T("Error in Find()\n"));
-
-        wxListInt::compatibility_iterator node = list1.GetFirst();
-        i = 0;
-
-        while (node)
-        {
-            if ( node->GetData() != dummy + i )
-                wxPuts(_T("Error in compatibility_iterator\n"));
-            node = node->GetNext();
-            ++i;
-        }
-
-        if ( size_t(i) != list1.GetCount() )
-            wxPuts(_T("Error in compatibility_iterator\n"));
-
-        list1.Insert(dummy + 0);
-        list1.Insert(1, dummy + 1);
-        list1.Insert(list1.GetFirst()->GetNext()->GetNext(), dummy + 2);
-
-        node = list1.GetFirst();
-        i = 0;
-
-        while (i < 3)
-        {
-            int* t = node->GetData();
-            if ( t != dummy + i )
-                wxPuts(_T("Error in Insert\n"));
-            node = node->GetNext();
-            ++i;
-        }
-    }
-
-    wxPuts(_T("*** Testing wxList operations finished ***\n"));
-
-    wxPuts(_T("*** Testing std::list operations ***\n"));
-
-    {
-        wxListInt list1;
-        wxListInt::iterator it, en;
-        wxListInt::reverse_iterator rit, ren;
-        int i;
-        for ( i = 0; i < 5; ++i )
-            list1.push_back(i + &i);
-
-        for ( it = list1.begin(), en = list1.end(), i = 0;
-              it != en; ++it, ++i )
-            if ( *it != i + &i )
-                wxPuts(_T("Error in iterator\n"));
-
-        for ( rit = list1.rbegin(), ren = list1.rend(), i = 4;
-              rit != ren; ++rit, --i )
-            if ( *rit != i + &i )
-                wxPuts(_T("Error in reverse_iterator\n"));
-
-        if ( *list1.rbegin() != *--list1.end() ||
-             *list1.begin() != *--list1.rend() )
-            wxPuts(_T("Error in iterator/reverse_iterator\n"));
-        if ( *list1.begin() != *--++list1.begin() ||
-             *list1.rbegin() != *--++list1.rbegin() )
-            wxPuts(_T("Error in iterator/reverse_iterator\n"));
-
-        if ( list1.front() != &i || list1.back() != &i + 4 )
-            wxPuts(_T("Error in front()/back()\n"));
-
-        list1.erase(list1.begin());
-        list1.erase(--list1.end());
-
-        for ( it = list1.begin(), en = list1.end(), i = 1;
-              it != en; ++it, ++i )
-            if ( *it != i + &i )
-                wxPuts(_T("Error in erase()\n"));
-    }
-
-    wxPuts(_T("*** Testing std::list operations finished ***\n"));
-}
-
-static void TestListCtor()
-{
-    wxPuts(_T("*** Testing wxList construction ***\n"));
-
-    {
-        wxListBars list1;
-        list1.Append(new Bar(_T("first")));
-        list1.Append(new Bar(_T("second")));
-
-        wxPrintf(_T("After 1st list creation: %u objects in the list, %u objects total.\n"),
-               list1.GetCount(), Bar::GetNumber());
-
-        wxListBars list2;
-        list2 = list1;
-
-        wxPrintf(_T("After 2nd list creation: %u and %u objects in the lists, %u objects total.\n"),
-               list1.GetCount(), list2.GetCount(), Bar::GetNumber());
-
-#if !wxUSE_STL
-        list1.DeleteContents(true);
-#else
-        WX_CLEAR_LIST(wxListBars, list1);
-#endif
-    }
-
-    wxPrintf(_T("After list destruction: %u objects left.\n"), Bar::GetNumber());
+    if ( !fn.Touch() )
+    {
+        wxPrintf(_T("ERROR: Touch() failed.\n"));
+    }
 }
+#endif
 
-#endif // TEST_LIST
+#endif // TEST_FILETIME
 
 // ----------------------------------------------------------------------------
 // wxLocale
@@ -1808,32 +1325,6 @@ static void TestMimeEnum()
     wxPuts(wxEmptyString);
 }
 
-static void TestMimeOverride()
-{
-    wxPuts(_T("*** Testing wxMimeTypesManager additional files loading ***\n"));
-
-    static const wxChar *mailcap = _T("/tmp/mailcap");
-    static const wxChar *mimetypes = _T("/tmp/mime.types");
-
-    if ( wxFile::Exists(mailcap) )
-        wxPrintf(_T("Loading mailcap from '%s': %s\n"),
-                 mailcap,
-                 wxTheMimeTypesManager->ReadMailcap(mailcap) ? _T("ok") : _T("ERROR"));
-    else
-        wxPrintf(_T("WARN: mailcap file '%s' doesn't exist, not loaded.\n"),
-                 mailcap);
-
-    if ( wxFile::Exists(mimetypes) )
-        wxPrintf(_T("Loading mime.types from '%s': %s\n"),
-                 mimetypes,
-                 wxTheMimeTypesManager->ReadMimeTypes(mimetypes) ? _T("ok") : _T("ERROR"));
-    else
-        wxPrintf(_T("WARN: mime.types file '%s' doesn't exist, not loaded.\n"),
-                 mimetypes);
-
-    wxPuts(wxEmptyString);
-}
-
 static void TestMimeFilename()
 {
     wxPuts(_T("*** Testing MIME type from filename query ***\n"));
@@ -1878,6 +1369,35 @@ static void TestMimeFilename()
     wxPuts(wxEmptyString);
 }
 
+// these tests were broken by wxMimeTypesManager changes, temporarily disabling
+#if 0
+
+static void TestMimeOverride()
+{
+    wxPuts(_T("*** Testing wxMimeTypesManager additional files loading ***\n"));
+
+    static const wxChar *mailcap = _T("/tmp/mailcap");
+    static const wxChar *mimetypes = _T("/tmp/mime.types");
+
+    if ( wxFile::Exists(mailcap) )
+        wxPrintf(_T("Loading mailcap from '%s': %s\n"),
+                 mailcap,
+                 wxTheMimeTypesManager->ReadMailcap(mailcap) ? _T("ok") : _T("ERROR"));
+    else
+        wxPrintf(_T("WARN: mailcap file '%s' doesn't exist, not loaded.\n"),
+                 mailcap);
+
+    if ( wxFile::Exists(mimetypes) )
+        wxPrintf(_T("Loading mime.types from '%s': %s\n"),
+                 mimetypes,
+                 wxTheMimeTypesManager->ReadMimeTypes(mimetypes) ? _T("ok") : _T("ERROR"));
+    else
+        wxPrintf(_T("WARN: mime.types file '%s' doesn't exist, not loaded.\n"),
+                 mimetypes);
+
+    wxPuts(wxEmptyString);
+}
+
 static void TestMimeAssociate()
 {
     wxPuts(_T("*** Testing creation of filetype association ***\n"));
@@ -1888,7 +1408,7 @@ static void TestMimeAssociate()
                             _T(""),             // print cmd
                             _T("XYZ File"),     // description
                             _T(".xyz"),         // extensions
-                            NULL                // end of extensions
+                            wxNullPtr           // end of extensions
                          );
     ftInfo.SetShortDesc(_T("XYZFile")); // used under Win32 only
 
@@ -1906,8 +1426,84 @@ static void TestMimeAssociate()
     wxPuts(wxEmptyString);
 }
 
+#endif // 0
+
 #endif // TEST_MIME
 
+// ----------------------------------------------------------------------------
+// module dependencies feature
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_MODULE
+
+#include "wx/module.h"
+
+class wxTestModule : public wxModule
+{
+protected:
+    virtual bool OnInit() { wxPrintf(_T("Load module: %s\n"), GetClassInfo()->GetClassName()); return true; }
+    virtual void OnExit() { wxPrintf(_T("Unload module: %s\n"), GetClassInfo()->GetClassName()); }
+};
+
+class wxTestModuleA : public wxTestModule
+{
+public:
+    wxTestModuleA();
+private:
+    DECLARE_DYNAMIC_CLASS(wxTestModuleA)
+};
+
+class wxTestModuleB : public wxTestModule
+{
+public:
+    wxTestModuleB();
+private:
+    DECLARE_DYNAMIC_CLASS(wxTestModuleB)
+};
+
+class wxTestModuleC : public wxTestModule
+{
+public:
+    wxTestModuleC();
+private:
+    DECLARE_DYNAMIC_CLASS(wxTestModuleC)
+};
+
+class wxTestModuleD : public wxTestModule
+{
+public:
+    wxTestModuleD();
+private:
+    DECLARE_DYNAMIC_CLASS(wxTestModuleD)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxTestModuleC, wxModule)
+wxTestModuleC::wxTestModuleC()
+{
+    AddDependency(CLASSINFO(wxTestModuleD));
+}
+
+IMPLEMENT_DYNAMIC_CLASS(wxTestModuleA, wxModule)
+wxTestModuleA::wxTestModuleA()
+{
+    AddDependency(CLASSINFO(wxTestModuleB));
+    AddDependency(CLASSINFO(wxTestModuleD));
+}
+
+IMPLEMENT_DYNAMIC_CLASS(wxTestModuleD, wxModule)
+wxTestModuleD::wxTestModuleD()
+{
+}
+
+IMPLEMENT_DYNAMIC_CLASS(wxTestModuleB, wxModule)
+wxTestModuleB::wxTestModuleB()
+{
+    AddDependency(CLASSINFO(wxTestModuleD));
+    AddDependency(CLASSINFO(wxTestModuleC));
+}
+
+#endif // TEST_MODULE
+
 // ----------------------------------------------------------------------------
 // misc information functions
 // ----------------------------------------------------------------------------
@@ -1916,6 +1512,7 @@ static void TestMimeAssociate()
 
 #include "wx/utils.h"
 
+#if TEST_INTERACTIVE
 static void TestDiskInfo()
 {
     wxPuts(_T("*** Testing wxGetDiskSpace() ***"));
@@ -1944,6 +1541,7 @@ static void TestDiskInfo()
         }
     }
 }
+#endif // TEST_INTERACTIVE
 
 static void TestOsInfo()
 {
@@ -1954,7 +1552,7 @@ static void TestOsInfo()
     wxPrintf(_T("Running under: %s, version %d.%d\n"),
             wxGetOsDescription().c_str(), major, minor);
 
-    wxPrintf(_T("%ld free bytes of memory left.\n"), wxGetFreeMemory());
+    wxPrintf(_T("%ld free bytes of memory left.\n"), wxGetFreeMemory().ToLong());
 
     wxPrintf(_T("Host name is %s (%s).\n"),
            wxGetHostName().c_str(), wxGetFullHostName().c_str());
@@ -1962,6 +1560,23 @@ static void TestOsInfo()
     wxPuts(wxEmptyString);
 }
 
+static void TestPlatformInfo()
+{
+    wxPuts(_T("*** Testing wxPlatformInfo functions ***\n"));
+
+    // get this platform
+    wxPlatformInfo plat;
+
+    wxPrintf(_T("Operating system family name is: %s\n"), plat.GetOperatingSystemFamilyName().c_str());
+    wxPrintf(_T("Operating system name is: %s\n"), plat.GetOperatingSystemIdName().c_str());
+    wxPrintf(_T("Port ID name is: %s\n"), plat.GetPortIdName().c_str());
+    wxPrintf(_T("Port ID short name is: %s\n"), plat.GetPortIdShortName().c_str());
+    wxPrintf(_T("Architecture is: %s\n"), plat.GetArchName().c_str());
+    wxPrintf(_T("Endianness is: %s\n"), plat.GetEndiannessName().c_str());
+
+    wxPuts(wxEmptyString);
+}
+
 static void TestUserInfo()
 {
     wxPuts(_T("*** Testing user info functions ***\n"));
@@ -2071,26 +1686,6 @@ static void TestRegExInteractive()
 
 #endif // TEST_REGEX
 
-// ----------------------------------------------------------------------------
-// database
-// ----------------------------------------------------------------------------
-
-#if !wxUSE_ODBC
-    #undef TEST_ODBC
-#endif
-
-#ifdef TEST_ODBC
-
-#include <wx/db.h>
-
-static void TestDbOpen()
-{
-    HENV henv;
-    wxDb db(henv);
-}
-
-#endif // TEST_ODBC
-
 // ----------------------------------------------------------------------------
 // printf() tests
 // ----------------------------------------------------------------------------
@@ -2493,7 +2088,7 @@ static void TestRegConfWrite()
 
 static void TestRegConfRead()
 {
-    wxConfig *config = new wxConfig(_T("myapp"));
+    wxRegConfig *config = new wxRegConfig(_T("myapp"));
 
     wxString str;
     long dummy;
@@ -2640,9 +2235,9 @@ static void TestScopeGuard()
     wxON_BLOCK_EXIT2(function2, 3.14, 'p');
 
     Object obj;
-    wxON_BLOCK_EXIT_OBJ0(obj, &Object::method0);
-    wxON_BLOCK_EXIT_OBJ1(obj, &Object::method1, 7);
-    wxON_BLOCK_EXIT_OBJ2(obj, &Object::method2, 2.71, 'e');
+    wxON_BLOCK_EXIT_OBJ0(obj, Object::method0);
+    wxON_BLOCK_EXIT_OBJ1(obj, Object::method1, 7);
+    wxON_BLOCK_EXIT_OBJ2(obj, Object::method2, 2.71, 'e');
 
     wxScopeGuard dismissed = wxMakeGuard(function0);
     dismissed.Dismiss();
@@ -2850,7 +2445,8 @@ static bool TestFtpConnect()
     else
     {
         wxPrintf(_T("--- Connected to %s, current directory is '%s'\n"),
-               hostname, ftp.Pwd().c_str());
+                 hostname, ftp.Pwd().c_str());
+        ftp.Close();
     }
 
     return true;
@@ -3120,6 +2716,115 @@ static void TestFtpUpload()
 
 #endif // TEST_FTP
 
+// ----------------------------------------------------------------------------
+// stack backtrace
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_STACKWALKER
+
+#if wxUSE_STACKWALKER
+
+#include "wx/stackwalk.h"
+
+class StackDump : public wxStackWalker
+{
+public:
+    StackDump(const char *argv0)
+        : wxStackWalker(argv0)
+    {
+    }
+
+    virtual void Walk(size_t skip = 1)
+    {
+        wxPuts(_T("Stack dump:"));
+
+        wxStackWalker::Walk(skip);
+    }
+
+protected:
+    virtual void OnStackFrame(const wxStackFrame& frame)
+    {
+        printf("[%2d] ", (int) frame.GetLevel());
+
+        wxString name = frame.GetName();
+        if ( !name.empty() )
+        {
+            printf("%-20.40s", (const char*)name.mb_str());
+        }
+        else
+        {
+            printf("0x%08lx", (unsigned long)frame.GetAddress());
+        }
+
+        if ( frame.HasSourceLocation() )
+        {
+            printf("\t%s:%d",
+                   (const char*)frame.GetFileName().mb_str(),
+                   (int)frame.GetLine());
+        }
+
+        puts("");
+
+        wxString type, val;
+        for ( size_t n = 0; frame.GetParam(n, &type, &name, &val); n++ )
+        {
+            printf("\t%s %s = %s\n", (const char*)type.mb_str(), 
+                                     (const char*)name.mb_str(), 
+                                     (const char*)val.mb_str());
+        }
+    }
+};
+
+static void TestStackWalk(const char *argv0)
+{
+    wxPuts(_T("*** Testing wxStackWalker ***\n"));
+
+    StackDump dump(argv0);
+    dump.Walk();
+}
+
+#endif // wxUSE_STACKWALKER
+
+#endif // TEST_STACKWALKER
+
+// ----------------------------------------------------------------------------
+// standard paths
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_STDPATHS
+
+#include "wx/stdpaths.h"
+#include "wx/wxchar.h"      // wxPrintf
+
+static void TestStandardPaths()
+{
+    wxPuts(_T("*** Testing wxStandardPaths ***\n"));
+
+    wxTheApp->SetAppName(_T("console"));
+
+    wxStandardPathsBase& stdp = wxStandardPaths::Get();
+    wxPrintf(_T("Config dir (sys):\t%s\n"), stdp.GetConfigDir().c_str());
+    wxPrintf(_T("Config dir (user):\t%s\n"), stdp.GetUserConfigDir().c_str());
+    wxPrintf(_T("Data dir (sys):\t\t%s\n"), stdp.GetDataDir().c_str());
+    wxPrintf(_T("Data dir (sys local):\t%s\n"), stdp.GetLocalDataDir().c_str());
+    wxPrintf(_T("Data dir (user):\t%s\n"), stdp.GetUserDataDir().c_str());
+    wxPrintf(_T("Data dir (user local):\t%s\n"), stdp.GetUserLocalDataDir().c_str());
+    wxPrintf(_T("Documents dir:\t\t%s\n"), stdp.GetDocumentsDir().c_str());
+    wxPrintf(_T("Executable path:\t%s\n"), stdp.GetExecutablePath().c_str());
+    wxPrintf(_T("Plugins dir:\t\t%s\n"), stdp.GetPluginsDir().c_str());
+    wxPrintf(_T("Resources dir:\t\t%s\n"), stdp.GetResourcesDir().c_str());
+    wxPrintf(_T("Localized res. dir:\t%s\n"),
+             stdp.GetLocalizedResourcesDir(_T("fr")).c_str());
+    wxPrintf(_T("Message catalogs dir:\t%s\n"),
+             stdp.GetLocalizedResourcesDir
+                  (
+                    _T("fr"),
+                    wxStandardPaths::ResourceCat_Messages
+                  ).c_str());
+}
+
+#endif // TEST_STDPATHS
+
 // ----------------------------------------------------------------------------
 // streams
 // ----------------------------------------------------------------------------
@@ -3139,11 +2844,13 @@ static void TestFileStream()
         fsOut.Write("foo", 3);
     }
 
-    wxFileInputStream fsIn(filename);
-    wxPrintf(_T("File stream size: %u\n"), fsIn.GetSize());
-    while ( !fsIn.Eof() )
     {
-        wxPutchar(fsIn.GetC());
+        wxFileInputStream fsIn(filename);
+        wxPrintf(_T("File stream size: %u\n"), fsIn.GetSize());
+        while ( !fsIn.Eof() )
+        {
+            wxPutchar(fsIn.GetC());
+        }
     }
 
     if ( !wxRemoveFile(filename) )
@@ -3193,7 +2900,7 @@ static void TestMemoryStream()
 
 #ifdef TEST_TIMER
 
-#include "wx/timer.h"
+#include "wx/stopwatch.h"
 #include "wx/utils.h"
 
 static void TestStopWatch()
@@ -3246,6 +2953,52 @@ static void TestStopWatch()
     wxPuts(_T(", ok."));
 }
 
+#include "wx/timer.h"
+#include "wx/evtloop.h"
+
+void TestTimer()
+{
+    wxPuts(_T("*** Testing wxTimer ***\n"));
+
+    class MyTimer : public wxTimer
+    {
+    public:
+        MyTimer() : wxTimer() { m_num = 0; }
+
+        virtual void Notify()
+        {
+            wxPrintf(_T("%d"), m_num++);
+            fflush(stdout);
+
+            if ( m_num == 10 )
+            {
+                wxPrintf(_T("... exiting the event loop"));
+                Stop();
+
+                wxEventLoop::GetActive()->Exit(0);
+                wxPuts(_T(", ok."));
+            }
+
+            fflush(stdout);
+        }
+
+    private:
+        int m_num;
+    };
+
+    wxEventLoop loop;
+
+    wxTimer timer1;
+    timer1.Start(100, true /* one shot */);
+    timer1.Stop();
+    timer1.Start(100, true /* one shot */);
+
+    MyTimer timer;
+    timer.Start(500);
+
+    loop.Run();
+}
+
 #endif // TEST_TIMER
 
 // ----------------------------------------------------------------------------
@@ -3454,7 +3207,7 @@ static void TestVCardRead()
 
         wxPrintf(_T("Full name from wxVCard API: %s\n"), value.c_str());
 
-        // now show how to deal with multiply occuring properties
+        // now show how to deal with multiply occurring properties
         DumpVCardAddresses(vcard);
         DumpVCardPhoneNumbers(vcard);
 
@@ -3682,7 +3435,11 @@ static void TestZipStreamRead()
     wxPuts(_T("*** Testing ZIP reading ***\n"));
 
     static const wxString filename = _T("foo");
-    wxZipInputStream istr(TESTFILE_ZIP, filename);
+    wxFFileInputStream in(TESTFILE_ZIP);
+    wxZipInputStream istr(in); 
+    wxZipEntry entry(filename);
+    istr.OpenEntry(entry);
+
     wxPrintf(_T("Archive size: %u\n"), istr.GetSize());
 
     wxPrintf(_T("Dumping the file '%s':\n"), filename.c_str());
@@ -3756,8 +3513,7 @@ static void TestZipFileSystem()
 
 #ifdef TEST_DATETIME
 
-#include <math.h>
-
+#include "wx/math.h"
 #include "wx/datetime.h"
 
 // this test miscellaneous static wxDateTime functions
@@ -4474,6 +4230,24 @@ static void TestSemaphore()
 
 int main(int argc, char **argv)
 {
+#if wxUSE_UNICODE
+    wxChar **wxArgv = new wxChar *[argc + 1];
+
+    {
+        int n;
+
+        for (n = 0; n < argc; n++ )
+        {
+            wxMB2WXbuf warg = wxConvertMB2WX(argv[n]);
+            wxArgv[n] = wxStrdup(warg);
+        }
+
+        wxArgv[n] = NULL;
+    }
+#else // !wxUSE_UNICODE
+    #define wxArgv argv
+#endif // wxUSE_UNICODE/!wxUSE_UNICODE
+
     wxApp::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE, "program");
 
     wxInitializer initializer;
@@ -4511,52 +4285,27 @@ int main(int argc, char **argv)
 #if wxUSE_CMDLINE_PARSER
     static const wxCmdLineEntryDesc cmdLineDesc[] =
     {
-        { wxCMD_LINE_SWITCH, _T("h"), _T("help"), _T("show this help message"),
+        { wxCMD_LINE_SWITCH, "h", "help", "show this help message",
             wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
-        { wxCMD_LINE_SWITCH, _T("v"), _T("verbose"), _T("be verbose") },
-        { wxCMD_LINE_SWITCH, _T("q"), _T("quiet"),   _T("be quiet") },
+        { wxCMD_LINE_SWITCH, "v", "verbose", "be verbose" },
+        { wxCMD_LINE_SWITCH, "q", "quiet",   "be quiet" },
 
-        { wxCMD_LINE_OPTION, _T("o"), _T("output"),  _T("output file") },
-        { wxCMD_LINE_OPTION, _T("i"), _T("input"),   _T("input dir") },
-        { wxCMD_LINE_OPTION, _T("s"), _T("size"),    _T("output block size"),
+        { wxCMD_LINE_OPTION, "o", "output",  "output file" },
+        { wxCMD_LINE_OPTION, "i", "input",   "input dir" },
+        { wxCMD_LINE_OPTION, "s", "size",    "output block size",
             wxCMD_LINE_VAL_NUMBER },
-        { wxCMD_LINE_OPTION, _T("d"), _T("date"),    _T("output file date"),
+        { wxCMD_LINE_OPTION, "d", "date",    "output file date",
             wxCMD_LINE_VAL_DATE },
+        { wxCMD_LINE_OPTION, "f", "double",  "output double",
+            wxCMD_LINE_VAL_DOUBLE },
 
-        { wxCMD_LINE_PARAM,  NULL, NULL, _T("input file"),
+        { wxCMD_LINE_PARAM,  NULL, NULL, "input file",
             wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE },
 
         { wxCMD_LINE_NONE }
     };
 
-#if wxUSE_UNICODE
-    wxChar **wargv = new wxChar *[argc + 1];
-
-    {
-        int n;
-
-        for (n = 0; n < argc; n++ )
-        {
-            wxMB2WXbuf warg = wxConvertMB2WX(argv[n]);
-            wargv[n] = wxStrdup(warg);
-        }
-
-        wargv[n] = NULL;
-    }
-
-    #define argv wargv
-#endif // wxUSE_UNICODE
-
-    wxCmdLineParser parser(cmdLineDesc, argc, argv);
-
-#if wxUSE_UNICODE
-    {
-        for ( int n = 0; n < argc; n++ )
-            free(wargv[n]);
-
-        delete [] wargv;
-    }
-#endif // wxUSE_UNICODE
+    wxCmdLineParser parser(cmdLineDesc, argc, wxArgv);
 
     parser.AddOption(_T("project_name"), _T(""), _T("full path to project file"),
                      wxCMD_LINE_VAL_STRING,
@@ -4588,9 +4337,10 @@ int main(int argc, char **argv)
     TestDirTraverse();
 #endif // TEST_DIR
 
-#ifdef TEST_DLLLOADER
+#ifdef TEST_DYNLIB
     TestDllLoad();
-#endif // TEST_DLLLOADER
+    TestDllListLoaded();
+#endif // TEST_DYNLIB
 
 #ifdef TEST_ENVIRON
     TestEnvironment();
@@ -4604,11 +4354,6 @@ int main(int argc, char **argv)
     TestFileConfRead();
 #endif // TEST_FILECONF
 
-#ifdef TEST_LIST
-    TestListCtor();
-    TestList();
-#endif // TEST_LIST
-
 #ifdef TEST_LOCALE
     TestDefaultLang();
 #endif // TEST_LOCALE
@@ -4641,13 +4386,10 @@ int main(int argc, char **argv)
     TestFileRead();
     TestTextFileRead();
     TestFileCopy();
+    TestTempFile();
 #endif // TEST_FILE
 
 #ifdef TEST_FILENAME
-    TestFileNameConstruction();
-    TestFileNameMakeRelative();
-    TestFileNameMakeAbsolute();
-    TestFileNameSplit();
     TestFileNameTemp();
     TestFileNameCwd();
     TestFileNameDirManip();
@@ -4672,7 +4414,7 @@ int main(int argc, char **argv)
             TestFtpMisc();
             TestFtpFileSize();
             TestFtpUpload();
-        #endif
+        #endif // TEST_ALL
 
         #if TEST_INTERACTIVE
             TestFtpInteractive();
@@ -4685,32 +4427,23 @@ int main(int argc, char **argv)
     #endif
 #endif // TEST_FTP
 
-#ifdef TEST_HASHMAP
-    TestHashMap();
-#endif // TEST_HASHMAP
-
-#ifdef TEST_HASHSET
-    TestHashSet();
-#endif // TEST_HASHSET
-
 #ifdef TEST_MIME
-    wxLog::AddTraceMask(_T("mime"));
-    #if TEST_ALL
-        TestMimeEnum();
-        TestMimeOverride();
-        TestMimeAssociate();
-    #endif
+    //wxLog::AddTraceMask(_T("mime"));
+    TestMimeEnum();
+#if 0
+    TestMimeOverride();
+    TestMimeAssociate();
+#endif
     TestMimeFilename();
 #endif // TEST_MIME
 
 #ifdef TEST_INFO_FUNCTIONS
-    #if TEST_ALL
-        TestOsInfo();
-        TestUserInfo();
+    TestOsInfo();
+    TestPlatformInfo();
+    TestUserInfo();
 
-        #if TEST_INTERACTIVE
-            TestDiskInfo();
-        #endif
+    #if TEST_INTERACTIVE
+        TestDiskInfo();
     #endif
 #endif // TEST_INFO_FUNCTIONS
 
@@ -4718,10 +4451,6 @@ int main(int argc, char **argv)
     TestPathList();
 #endif // TEST_PATHLIST
 
-#ifdef TEST_ODBC
-    TestDbOpen();
-#endif // TEST_ODBC
-
 #ifdef TEST_PRINTF
     TestPrintf();
 #endif // TEST_PRINTF
@@ -4779,21 +4508,15 @@ int main(int argc, char **argv)
 
 #ifdef TEST_TIMER
     TestStopWatch();
+    TestTimer();
 #endif // TEST_TIMER
 
 #ifdef TEST_DATETIME
     #if TEST_ALL
-        TestTimeSet();
         TestTimeStatic();
         TestTimeRange();
         TestTimeZones();
-        TestTimeTicks();
-        TestTimeJDN();
         TestTimeDST();
-        TestTimeWDays();
-        TestTimeWNumber();
-        TestTimeParse();
-        TestTimeArithmetics();
         TestTimeHolidays();
         TestTimeSpanFormat();
         TestTimeMS();
@@ -4810,6 +4533,16 @@ int main(int argc, char **argv)
     TestScopeGuard();
 #endif
 
+#ifdef TEST_STACKWALKER
+#if wxUSE_STACKWALKER
+    TestStackWalk(argv[0]);
+#endif
+#endif // TEST_STACKWALKER
+
+#ifdef TEST_STDPATHS
+    TestStandardPaths();
+#endif
+
 #ifdef TEST_USLEEP
     wxPuts(_T("Sleeping for 3 seconds... z-z-z-z-z..."));
     wxUsleep(3000);
@@ -4834,8 +4567,16 @@ int main(int argc, char **argv)
     TestZipFileSystem();
 #endif // TEST_ZIP
 
+#if wxUSE_UNICODE
+    {
+        for ( int n = 0; n < argc; n++ )
+            free(wxArgv[n]);
+
+        delete [] wxArgv;
+    }
+#endif // wxUSE_UNICODE
+
     wxUnusedVar(argc);
     wxUnusedVar(argv);
     return 0;
 }
-