X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ee6e1b1d9c31045c74b8bb9cea0e47c6899d8b5d..4bd87101b398ea89795bae4012bbb03866b7e0f5:/samples/console/console.cpp diff --git a/samples/console/console.cpp b/samples/console/console.cpp index b589b8fd9e..3704299795 100644 --- a/samples/console/console.cpp +++ b/samples/console/console.cpp @@ -23,34 +23,43 @@ #include #include +// 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_FILECONF +//#define TEST_HASH //#define TEST_LOG //#define TEST_LONGLONG //#define TEST_MIME +//#define TEST_SOCKETS //#define TEST_STRINGS //#define TEST_THREADS -//#define TEST_TIME +#define TEST_TIMER // ============================================================================ // implementation // ============================================================================ -#ifdef TEST_CMDLINE - // ---------------------------------------------------------------------------- // wxCmdLineParser // ---------------------------------------------------------------------------- +#ifdef TEST_CMDLINE + #include #include @@ -176,16 +185,55 @@ 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("ERROR."); +#endif // 0 + + printf("Testing wxExecute with redirection:\n"); + wxArrayString output; + if ( wxExecute(REDIRECT_COMMAND, output) != 0 ) + { + puts("ERROR."); + } else - puts("\nError."); + { + 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 @@ -253,6 +301,92 @@ static void TestFileConfRead() #endif // TEST_FILECONF +// ---------------------------------------------------------------------------- +// wxHashTable +// ---------------------------------------------------------------------------- + +#ifdef TEST_HASH + +#include + +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_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 // ---------------------------------------------------------------------------- @@ -555,11 +689,94 @@ static void TestBitOperations() #endif // TEST_LONGLONG +// ---------------------------------------------------------------------------- +// sockets +// ---------------------------------------------------------------------------- + +#ifdef TEST_SOCKETS + +#include + +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 +#include + +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 @@ -1499,7 +1716,7 @@ static void TestTimeCompatibility() #endif // 0 -#endif // TEST_TIME +#endif // TEST_DATETIME // ---------------------------------------------------------------------------- // threads @@ -2217,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(); @@ -2240,7 +2469,7 @@ int main(int argc, char **argv) TestTimeHolidays(); if ( 0 ) TestInteractive(); -#endif // TEST_TIME +#endif // TEST_DATETIME wxUninitialize();