]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/console/console.cpp
Added samples.inc to DATAFILES in Makefile.in - is that enough?
[wxWidgets.git] / samples / console / console.cpp
index d073cb55119683dd1fc6e31b65f72d84b3edc1f1..37042997953f80cbb3726bf690c044eeae79c3e6 100644 (file)
 #include <wx/file.h>
 #include <wx/app.h>
 
+// without this pragma, the stupid compiler precompiles #defines below so that
+// changing them doesn't "take place" later!
+#ifdef __VISUALC__
+    #pragma hdrstop
+#endif
+
 // ----------------------------------------------------------------------------
 // conditional compilation
 // ----------------------------------------------------------------------------
 
-// what to test?
+// what to test (in alphabetic order)?
 
 //#define TEST_ARRAYS
 //#define TEST_CMDLINE
+//#define TEST_DATETIME
 //#define TEST_DIR
 //#define TEST_EXECUTE
+//#define TEST_FILECONF
+//#define TEST_HASH
 //#define TEST_LOG
 //#define TEST_LONGLONG
 //#define TEST_MIME
-#define TEST_STRINGS
+//#define TEST_SOCKETS
+//#define TEST_STRINGS
 //#define TEST_THREADS
-//#define TEST_TIME
+#define TEST_TIMER
 
 // ============================================================================
 // implementation
 // ============================================================================
 
-#ifdef TEST_CMDLINE
-
 // ----------------------------------------------------------------------------
 // wxCmdLineParser
 // ----------------------------------------------------------------------------
 
+#ifdef TEST_CMDLINE
+
 #include <wx/cmdline.h>
 #include <wx/datetime.h>
 
@@ -175,20 +185,208 @@ static void TestExecute()
 
 #ifdef __UNIX__
     #define COMMAND "echo hi"
+    #define SHELL_COMMAND "echo hi from shell"
+    #define REDIRECT_COMMAND "date"
 #elif defined(__WXMSW__)
     #define COMMAND "command.com -c 'echo hi'"
+    #define SHELL_COMMAND "echo hi"
+    #define REDIRECT_COMMAND COMMAND
 #else
     #error "no command to exec"
 #endif // OS
 
-    if ( wxExecute(COMMAND) == 0 )
-        puts("\nOk.");
+    printf("Testing wxShell: ");
+    fflush(stdout);
+    if ( wxShell(SHELL_COMMAND) )
+        puts("Ok.");
+    else
+        puts("ERROR.");
+
+    printf("Testing wxExecute: ");
+    fflush(stdout);
+    if ( wxExecute(COMMAND, TRUE /* sync */) == 0 )
+        puts("Ok.");
+    else
+        puts("ERROR.");
+
+#if 0 // no, it doesn't work (yet?)
+    printf("Testing async wxExecute: ");
+    fflush(stdout);
+    if ( wxExecute(COMMAND) != 0 )
+        puts("Ok (command launched).");
     else
-        puts("\nError.");
+        puts("ERROR.");
+#endif // 0
+
+    printf("Testing wxExecute with redirection:\n");
+    wxArrayString output;
+    if ( wxExecute(REDIRECT_COMMAND, output) != 0 )
+    {
+        puts("ERROR.");
+    }
+    else
+    {
+        size_t count = output.GetCount();
+        for ( size_t n = 0; n < count; n++ )
+        {
+            printf("\t%s\n", output[n].c_str());
+        }
+
+        puts("Ok.");
+    }
 }
 
 #endif // TEST_EXECUTE
 
+// ----------------------------------------------------------------------------
+// wxFileConfig
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_FILECONF
+
+#include <wx/confbase.h>
+#include <wx/fileconf.h>
+
+static const struct FileConfTestData
+{
+    const wxChar *name;      // value name
+    const wxChar *value;     // the value from the file
+} fcTestData[] =
+{
+    { _T("value1"),                       _T("one") },
+    { _T("value2"),                       _T("two") },
+    { _T("novalue"),                      _T("default") },
+};
+
+static void TestFileConfRead()
+{
+    puts("*** testing wxFileConfig loading/reading ***");
+
+    wxFileConfig fileconf(_T("test"), wxEmptyString,
+                          _T("testdata.fc"), wxEmptyString,
+                          wxCONFIG_USE_RELATIVE_PATH);
+
+    // test simple reading
+    puts("\nReading config file:");
+    wxString defValue(_T("default")), value;
+    for ( size_t n = 0; n < WXSIZEOF(fcTestData); n++ )
+    {
+        const FileConfTestData& data = fcTestData[n];
+        value = fileconf.Read(data.name, defValue);
+        printf("\t%s = %s ", data.name, value.c_str());
+        if ( value == data.value )
+        {
+            puts("(ok)");
+        }
+        else
+        {
+            printf("(ERROR: should be %s)\n", data.value);
+        }
+    }
+
+    // test enumerating the entries
+    puts("\nEnumerating all root entries:");
+    long dummy;
+    wxString name;
+    bool cont = fileconf.GetFirstEntry(name, dummy);
+    while ( cont )
+    {
+        printf("\t%s = %s\n",
+               name.c_str(),
+               fileconf.Read(name.c_str(), _T("ERROR")).c_str());
+
+        cont = fileconf.GetNextEntry(name, dummy);
+    }
+}
+
+#endif // TEST_FILECONF
+
+// ----------------------------------------------------------------------------
+// wxHashTable
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_HASH
+
+#include <wx/hash.h>
+
+struct Foo
+{
+    Foo(int n_) { n = n_; count++; }
+    ~Foo() { count--; }
+
+    int n;
+
+    static size_t count;
+};
+
+size_t Foo::count = 0;
+
+WX_DECLARE_LIST(Foo, wxListFoos);
+WX_DECLARE_HASH(Foo, wxListFoos, wxHashFoos);
+
+#include <wx/listimpl.cpp>
+
+WX_DEFINE_LIST(wxListFoos);
+
+static void TestHash()
+{
+    puts("*** Testing wxHashTable ***\n");
+
+    {
+        wxHashFoos hash;
+        hash.DeleteContents(TRUE);
+
+        printf("Hash created: %u foos in hash, %u foos totally\n",
+               hash.GetCount(), Foo::count);
+
+        static const int hashTestData[] =
+        {
+            0, 1, 17, -2, 2, 4, -4, 345, 3, 3, 2, 1,
+        };
+
+        size_t n;
+        for ( n = 0; n < WXSIZEOF(hashTestData); n++ )
+        {
+            hash.Put(hashTestData[n], n, new Foo(n));
+        }
+
+        printf("Hash filled: %u foos in hash, %u foos totally\n",
+               hash.GetCount(), Foo::count);
+
+        puts("Hash access test:");
+        for ( n = 0; n < WXSIZEOF(hashTestData); n++ )
+        {
+            printf("\tGetting element with key %d, value %d: ",
+                   hashTestData[n], n);
+            Foo *foo = hash.Get(hashTestData[n], n);
+            if ( !foo )
+            {
+                printf("ERROR, not found.\n");
+            }
+            else
+            {
+                printf("%d (%s)\n", foo->n,
+                       (size_t)foo->n == n ? "ok" : "ERROR");
+            }
+        }
+
+        printf("\nTrying to get an element not in hash: ");
+
+        if ( hash.Get(1234) || hash.Get(1, 0) )
+        {
+            puts("ERROR: found!");
+        }
+        else
+        {
+            puts("ok (not found)");
+        }
+    }
+
+    printf("Hash destroyed: %u foos left\n", Foo::count);
+}
+
+#endif // TEST_HASH
+
 // ----------------------------------------------------------------------------
 // MIME types
 // ----------------------------------------------------------------------------
@@ -491,11 +689,94 @@ static void TestBitOperations()
 
 #endif // TEST_LONGLONG
 
+// ----------------------------------------------------------------------------
+// sockets
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_SOCKETS
+
+#include <wx/socket.h>
+
+static void TestSocketClient()
+{
+    puts("*** Testing wxSocketClient ***\n");
+
+    wxIPV4address addrDst;
+    addrDst.Hostname("www.wxwindows.org");
+    addrDst.Service(80);
+
+    wxSocketClient client;
+    if ( !client.Connect(addrDst) )
+    {
+        printf("ERROR: failed to connect to %s\n", addrDst.Hostname().c_str());
+    }
+    else
+    {
+        char buf[8192];
+
+        client.Write("get /front.htm\n", 17);
+        client.Read(buf, WXSIZEOF(buf));
+        printf("Server replied:\n%s", buf);
+    }
+}
+
+#endif // TEST_SOCKETS
+
+// ----------------------------------------------------------------------------
+// timers
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_TIMER
+
+#include <wx/timer.h>
+#include <wx/utils.h>
+
+static void TestStopWatch()
+{
+    puts("*** Testing wxStopWatch ***\n");
+
+    wxStopWatch sw;
+    printf("Sleeping 3 seconds...");
+    wxSleep(3);
+    printf("\telapsed time: %ldms\n", sw.Time());
+
+    sw.Pause();
+    printf("Sleeping 2 more seconds...");
+    wxSleep(2);
+    printf("\telapsed time: %ldms\n", sw.Time());
+
+    sw.Resume();
+    printf("And 3 more seconds...");
+    wxSleep(3);
+    printf("\telapsed time: %ldms\n", sw.Time());
+
+    wxStopWatch sw2;
+    puts("\nChecking for 'backwards clock' bug...");
+    for ( size_t n = 0; n < 70; n++ )
+    {
+        sw2.Start();
+
+        for ( size_t m = 0; m < 100000; m++ )
+        {
+            if ( sw.Time() < 0 || sw2.Time() < 0 )
+            {
+                puts("\ntime is negative - ERROR!");
+            }
+        }
+
+        putchar('.');
+    }
+
+    puts(", ok.");
+}
+
+#endif // TEST_TIMER
+
 // ----------------------------------------------------------------------------
 // date time
 // ----------------------------------------------------------------------------
 
-#ifdef TEST_TIME
+#ifdef TEST_DATETIME
 
 #include <wx/date.h>
 
@@ -1435,7 +1716,7 @@ static void TestTimeCompatibility()
 
 #endif // 0
 
-#endif // TEST_TIME
+#endif // TEST_DATETIME
 
 // ----------------------------------------------------------------------------
 // threads
@@ -2048,8 +2329,8 @@ int main(int argc, char **argv)
         TestStringSub();
         TestStringFormat();
         TestStringFind();
-    }
         TestStringTokenizer();
+    }
 #endif // TEST_STRINGS
 
 #ifdef TEST_ARRAYS
@@ -2092,6 +2373,10 @@ int main(int argc, char **argv)
     TestExecute();
 #endif // TEST_EXECUTE
 
+#ifdef TEST_FILECONF
+    TestFileConfRead();
+#endif // TEST_FILECONF
+
 #ifdef TEST_LOG
     wxString s;
     for ( size_t n = 0; n < 8000; n++ )
@@ -2149,11 +2434,23 @@ int main(int argc, char **argv)
     }
 #endif // TEST_LONGLONG
 
+#ifdef TEST_HASH
+    TestHash();
+#endif // TEST_HASH
+
 #ifdef TEST_MIME
     TestMimeEnum();
 #endif // TEST_MIME
 
-#ifdef TEST_TIME
+#ifdef TEST_SOCKETS
+    TestSocketClient();
+#endif // TEST_SOCKETS
+
+#ifdef TEST_TIMER
+    TestStopWatch();
+#endif // TEST_TIMER
+
+#ifdef TEST_DATETIME
     if ( 0 )
     {
         TestTimeSet();
@@ -2172,7 +2469,7 @@ int main(int argc, char **argv)
     TestTimeHolidays();
     if ( 0 )
         TestInteractive();
-#endif // TEST_TIME
+#endif // TEST_DATETIME
 
     wxUninitialize();