#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>
#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
// ----------------------------------------------------------------------------
#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>
#endif // 0
-#endif // TEST_TIME
+#endif // TEST_DATETIME
// ----------------------------------------------------------------------------
// threads
TestStringSub();
TestStringFormat();
TestStringFind();
- }
TestStringTokenizer();
+ }
#endif // TEST_STRINGS
#ifdef TEST_ARRAYS
TestExecute();
#endif // TEST_EXECUTE
+#ifdef TEST_FILECONF
+ TestFileConfRead();
+#endif // TEST_FILECONF
+
#ifdef TEST_LOG
wxString s;
for ( size_t n = 0; n < 8000; n++ )
}
#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();
TestTimeHolidays();
if ( 0 )
TestInteractive();
-#endif // TEST_TIME
+#endif // TEST_DATETIME
wxUninitialize();