X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/765624f7350bf32b1c78a10ab1a1e10729c52cd1..c74d8df09d0c0e182cb2063cc4cc546de3a00fae:/samples/console/console.cpp?ds=inline diff --git a/samples/console/console.cpp b/samples/console/console.cpp index 67a1b7f2b2..052ab5a0ee 100644 --- a/samples/console/console.cpp +++ b/samples/console/console.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#include +#include "wx/defs.h" #if wxUSE_GUI #error "This sample can't be compiled in GUI mode." @@ -25,9 +25,9 @@ #include -#include -#include -#include +#include "wx/string.h" +#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! @@ -39,45 +39,68 @@ // conditional compilation // ---------------------------------------------------------------------------- -// what to test (in alphabetic order)? - -//#define TEST_ARRAYS -//#define TEST_CHARSET -//#define TEST_CMDLINE -//#define TEST_DATETIME -//#define TEST_DIR -//#define TEST_DLLLOADER -//#define TEST_ENVIRON -//#define TEST_EXECUTE -//#define TEST_FILE -//#define TEST_FILECONF -//#define TEST_FILENAME -//#define TEST_FTP -//#define TEST_HASH -//#define TEST_INFO_FUNCTIONS -//#define TEST_LIST -//#define TEST_LOCALE -//#define TEST_LOG -//#define TEST_LONGLONG -//#define TEST_MIME -//#define TEST_PATHLIST -//#define TEST_REGCONF -#define TEST_REGEX -//#define TEST_REGISTRY -//#define TEST_SNGLINST -//#define TEST_SOCKETS -//#define TEST_STREAMS -//#define TEST_STRINGS -//#define TEST_THREADS -//#define TEST_TIMER -//#define TEST_VCARD -- don't enable this (VZ) -//#define TEST_WCHAR -//#define TEST_ZIP -//#define TEST_ZLIB +/* + A note about all these conditional compilation macros: this file is used + both as a test suite for various non-GUI wxWindows classes and as a + scratchpad for quick tests. So there are two compilation modes: if you + define TEST_ALL all tests are run, otherwise you may enable the individual + tests individually in the "#else" branch below. + */ + +// what to test (in alphabetic order)? uncomment the line below to do all tests +// #define TEST_ALL +#ifdef TEST_ALL + #define TEST_ARRAYS + #define TEST_CHARSET + #define TEST_CMDLINE + #define TEST_DATETIME + #define TEST_DIR + #define TEST_DLLLOADER + #define TEST_ENVIRON + #define TEST_EXECUTE + #define TEST_FILE + #define TEST_FILECONF + #define TEST_FILENAME + #define TEST_FILETIME + #define TEST_FTP + #define TEST_HASH + #define TEST_INFO_FUNCTIONS + #define TEST_LIST + #define TEST_LOCALE + #define TEST_LOG + #define TEST_LONGLONG + #define TEST_MIME + #define TEST_PATHLIST + #define TEST_REGCONF + #define TEST_REGEX + #define TEST_REGISTRY + #define TEST_SNGLINST + #define TEST_SOCKETS + #define TEST_STREAMS + #define TEST_STRINGS + #define TEST_THREADS + #define TEST_TIMER + // #define TEST_VCARD -- don't enable this (VZ) + #define TEST_WCHAR + #define TEST_ZIP + #define TEST_ZLIB + + #undef TEST_ALL + static const bool TEST_ALL = TRUE; +#else + #define TEST_FILENAME -#ifdef TEST_SNGLINST - #include -#endif // TEST_SNGLINST + static const bool TEST_ALL = FALSE; +#endif + +// some tests are interactive, define this to run them +#ifdef TEST_INTERACTIVE + #undef TEST_INTERACTIVE + + static const bool TEST_INTERACTIVE = FALSE; +#else + static const bool TEST_INTERACTIVE = FALSE; +#endif // ---------------------------------------------------------------------------- // test class for container objects @@ -134,7 +157,7 @@ static wxString MakePrintable(const wxChar *s) #ifdef TEST_CHARSET -#include +#include "wx/fontmap.h" static void TestCharset() { @@ -174,8 +197,10 @@ static void TestCharset() #ifdef TEST_CMDLINE -#include -#include +#include "wx/cmdline.h" +#include "wx/datetime.h" + +#if wxUSE_CMDLINE_PARSER static void ShowCmdLine(const wxCmdLineParser& parser) { @@ -208,6 +233,32 @@ static void ShowCmdLine(const wxCmdLineParser& parser) wxLogMessage(s); } +#endif // wxUSE_CMDLINE_PARSER + +static void TestCmdLineConvert() +{ + static const char *cmdlines[] = + { + "arg1 arg2", + "-a \"-bstring 1\" -c\"string 2\" \"string 3\"", + "literal \\\" and \"\"", + }; + + for ( size_t n = 0; n < WXSIZEOF(cmdlines); n++ ) + { + const char *cmdline = cmdlines[n]; + printf("Parsing: %s\n", cmdline); + wxArrayString args = wxCmdLineParser::ConvertStringToArgs(cmdline); + + size_t count = args.GetCount(); + printf("\targc = %u\n", count); + for ( size_t arg = 0; arg < count; arg++ ) + { + printf("\targv[%u] = %s\n", arg, args[arg].c_str()); + } + } +} + #endif // TEST_CMDLINE // ---------------------------------------------------------------------------- @@ -216,7 +267,7 @@ static void ShowCmdLine(const wxCmdLineParser& parser) #ifdef TEST_DIR -#include +#include "wx/dir.h" #ifdef __UNIX__ static const wxChar *ROOTDIR = _T("/"); @@ -348,7 +399,7 @@ static void TestDirTraverse() #ifdef TEST_DLLLOADER -#include +#include "wx/dynlib.h" static void TestDllLoad() { @@ -372,7 +423,7 @@ static void TestDllLoad() } else { - typedef int (*strlenType)(char *); + typedef int (*strlenType)(const char *); strlenType pfnStrlen = (strlenType)wxDllLoader::GetSymbol(dllHandle, FUNC_NAME); if ( !pfnStrlen ) { @@ -403,7 +454,7 @@ static void TestDllLoad() #ifdef TEST_ENVIRON -#include +#include "wx/utils.h" static wxString MyGetEnv(const wxString& var) { @@ -440,7 +491,7 @@ static void TestEnvironment() #ifdef TEST_EXECUTE -#include +#include "wx/utils.h" static void TestExecute() { @@ -507,9 +558,9 @@ static void TestExecute() #ifdef TEST_FILE -#include -#include -#include +#include "wx/file.h" +#include "wx/ffile.h" +#include "wx/textfile.h" static void TestFileRead() { @@ -642,8 +693,8 @@ static void TestFileCopy() #ifdef TEST_FILECONF -#include -#include +#include "wx/confbase.h" +#include "wx/fileconf.h" static const struct FileConfTestData { @@ -705,24 +756,60 @@ static void TestFileConfRead() #ifdef TEST_FILENAME -#include +#include "wx/filename.h" + +static void DumpFileName(const wxFileName& fn) +{ + wxString full = fn.GetFullPath(); + + wxString vol, path, name, ext; + wxFileName::SplitPath(full, &vol, &path, &name, &ext); + + wxPrintf(_T("Filename '%s' -> vol '%s', path '%s', name '%s', ext '%s'\n"), + full.c_str(), vol.c_str(), path.c_str(), name.c_str(), ext.c_str()); +} static struct FileNameInfo { const wxChar *fullname; + const wxChar *volume; const wxChar *path; const wxChar *name; const wxChar *ext; + bool isAbsolute; + wxPathFormat format; } filenames[] = { - { _T("/usr/bin/ls"), _T("/usr/bin"), _T("ls"), _T("") }, - { _T("/usr/bin/"), _T("/usr/bin"), _T(""), _T("") }, - { _T("~/.zshrc"), _T("~"), _T(".zshrc"), _T("") }, - { _T("../../foo"), _T("../.."), _T("foo"), _T("") }, - { _T("foo.bar"), _T(""), _T("foo"), _T("bar") }, - { _T("~/foo.bar"), _T("~"), _T("foo"), _T("bar") }, - { _T("Mahogany-0.60/foo.bar"), _T("Mahogany-0.60"), _T("foo"), _T("bar") }, - { _T("/tmp/wxwin.tar.bz"), _T("/tmp"), _T("wxwin.tar"), _T("bz") }, + // 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 }, + + // 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 }, + + // 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() @@ -731,16 +818,29 @@ static void TestFileNameConstruction() for ( size_t n = 0; n < WXSIZEOF(filenames); n++ ) { - wxFileName fn(filenames[n].fullname, wxPATH_UNIX); + const FileNameInfo& fni = filenames[n]; + + wxFileName fn(fni.fullname, fni.format); - printf("Filename: '%s'\t", fn.GetFullPath().c_str()); - if ( !fn.Normalize(wxPATH_NORM_ALL, _T(""), wxPATH_UNIX) ) + wxString fullname = fn.GetFullPath(fni.format); + if ( fullname != fni.fullname ) + { + printf("ERROR: fullname should be '%s'\n", fni.fullname); + } + + bool isAbsolute = fn.IsAbsolute(); + printf("'%s' is %s (%s)\n\t", + fullname.c_str(), + isAbsolute ? "absolute" : "relative", + isAbsolute == fni.isAbsolute ? "ok" : "ERROR"); + + if ( !fn.Normalize(wxPATH_NORM_ALL, _T(""), fni.format) ) { puts("ERROR (couldn't be normalized)"); } else { - printf("normalized: '%s'\n", fn.GetFullPath().c_str()); + printf("normalized: '%s'\n", fn.GetFullPath(fni.format).c_str()); } } @@ -753,22 +853,101 @@ static void TestFileNameSplit() for ( size_t n = 0; n < WXSIZEOF(filenames); n++ ) { - const FileNameInfo &fni = filenames[n]; - wxString path, name, ext; - wxFileName::SplitPath(fni.fullname, &path, &name, &ext); + const FileNameInfo& fni = filenames[n]; + wxString volume, path, name, ext; + wxFileName::SplitPath(fni.fullname, + &volume, &path, &name, &ext, fni.format); - printf("%s -> path = '%s', name = '%s', ext = '%s'", - fni.fullname, path.c_str(), name.c_str(), ext.c_str()); + printf("%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 ) + printf(" (ERROR: volume = '%s')", fni.volume); if ( path != fni.path ) printf(" (ERROR: path = '%s')", fni.path); if ( name != fni.name ) printf(" (ERROR: name = '%s')", fni.name); if ( ext != fni.ext ) printf(" (ERROR: ext = '%s')", fni.ext); + puts(""); } +} - puts(""); +static void TestFileNameTemp() +{ + puts("*** testing wxFileName temp file creation ***"); + + static const char *tmpprefixes[] = + { + "foo", + "/tmp/foo", + "..", + "../bar", + "/tmp/foo/bar", // this one must be an error + }; + + for ( size_t n = 0; n < WXSIZEOF(tmpprefixes); n++ ) + { + wxString path = wxFileName::CreateTempFileName(tmpprefixes[n]); + if ( !path.empty() ) + { + printf("Prefix '%s'\t-> temp file '%s'\n", + tmpprefixes[n], path.c_str()); + + if ( !wxRemoveFile(path) ) + { + wxLogWarning("Failed to remove temp file '%s'", path.c_str()); + } + } + } +} + +static void TestFileNameMakeRelative() +{ + puts("*** 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 = "/usr/bin/"; + break; + + case wxPATH_DOS: + base = "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( "unexpected path format" ); + } + + printf("'%s' relative to '%s': ", + fn.GetFullPath(fni.format).c_str(), base.c_str()); + + if ( !fn.MakeRelativeTo(base, fni.format) ) + { + puts("unchanged"); + } + else + { + printf("'%s'\n", fn.GetFullPath(fni.format).c_str()); + } + } } static void TestFileNameComparison() @@ -788,13 +967,54 @@ static void TestFileNameCwd() #endif // TEST_FILENAME +// ---------------------------------------------------------------------------- +// wxFileName time functions +// ---------------------------------------------------------------------------- + +#ifdef TEST_FILETIME + +#include +#include + +static void TestFileGetTimes() +{ + wxFileName fn(_T("testdata.fc")); + + wxDateTime dtAccess, dtMod, dtChange; + if ( !fn.GetTimes(&dtAccess, &dtMod, &dtChange) ) + { + wxPrintf(_T("ERROR: GetTimes() failed.\n")); + } + else + { + static const wxChar *fmt = _T("%Y-%b-%d %H:%M:%S"); + + wxPrintf(_T("File times for '%s':\n"), fn.GetFullPath().c_str()); + wxPrintf(_T("Access: \t%s\n"), dtAccess.Format(fmt).c_str()); + wxPrintf(_T("Mod/creation:\t%s\n"), dtMod.Format(fmt).c_str()); + wxPrintf(_T("Change: \t%s\n"), dtChange.Format(fmt).c_str()); + } +} + +static void TestFileSetTimes() +{ + wxFileName fn(_T("testdata.fc")); + + if ( !fn.Touch() ) + { + wxPrintf(_T("ERROR: Touch() failed.\n")); + } +} + +#endif // TEST_FILETIME + // ---------------------------------------------------------------------------- // wxHashTable // ---------------------------------------------------------------------------- #ifdef TEST_HASH -#include +#include "wx/hash.h" struct Foo { @@ -811,7 +1031,7 @@ size_t Foo::count = 0; WX_DECLARE_LIST(Foo, wxListFoos); WX_DECLARE_HASH(Foo, wxListFoos, wxHashFoos); -#include +#include "wx/listimpl.cpp" WX_DEFINE_LIST(wxListFoos); @@ -880,10 +1100,10 @@ static void TestHash() #ifdef TEST_LIST -#include +#include "wx/list.h" WX_DECLARE_LIST(Bar, wxListBars); -#include +#include "wx/listimpl.cpp" WX_DEFINE_LIST(wxListBars); static void TestListCtor() @@ -928,8 +1148,8 @@ static const char *GetLangName(int lang) { static const char *languageNames[] = { - "DEFAULT", - "UNKNOWN", + "DEFAULT", + "UNKNOWN", "ABKHAZIAN", "AFAR", "AFRIKAANS", @@ -1213,7 +1433,7 @@ static void TestDefaultLang() #ifdef TEST_MIME -#include +#include "wx/mimetype.h" static void TestMimeEnum() { @@ -1362,7 +1582,36 @@ static void TestMimeAssociate() #ifdef TEST_INFO_FUNCTIONS -#include +#include "wx/utils.h" + +static void TestDiskInfo() +{ + puts("*** Testing wxGetDiskSpace() ***"); + + for ( ;; ) + { + char pathname[128]; + printf("\nEnter a directory name: "); + if ( !fgets(pathname, WXSIZEOF(pathname), stdin) ) + break; + + // kill the last '\n' + pathname[strlen(pathname) - 1] = 0; + + wxLongLong total, free; + if ( !wxGetDiskSpace(pathname, &total, &free) ) + { + wxPuts(_T("ERROR: wxGetDiskSpace failed.")); + } + else + { + wxPrintf(_T("%sKb total, %sKb free on '%s'.\n"), + (total / 1024).ToString().c_str(), + (free / 1024).ToString().c_str(), + pathname); + } + } +} static void TestOsInfo() { @@ -1401,8 +1650,8 @@ static void TestUserInfo() #ifdef TEST_LONGLONG -#include -#include +#include "wx/longlong.h" +#include "wx/timer.h" // make a 64 bit number from 4 16 bit ones #define MAKE_LL(x1, x2, x3, x4) wxLongLong((x1 << 16) | x2, (x3 << 16) | x3) @@ -1410,6 +1659,17 @@ static void TestUserInfo() // get a random 64 bit number #define RAND_LL() MAKE_LL(rand(), rand(), rand(), rand()) +static const long testLongs[] = +{ + 0, + 1, + -1, + LONG_MAX, + LONG_MIN, + 0x1234, + -0x1234 +}; + #if wxUSE_LONGLONG_WX inline bool operator==(const wxLongLongWx& a, const wxLongLongNative& b) { return a.GetHi() == b.GetHi() && a.GetLo() == b.GetLo(); } @@ -1635,17 +1895,6 @@ static void TestLongLongComparison() #if wxUSE_LONGLONG_WX puts("*** Testing wxLongLong comparison ***\n"); - static const long testLongs[] = - { - 0, - 1, - -1, - LONG_MAX, - LONG_MIN, - 0x1234, - -0x1234 - }; - static const long ls[2] = { 0x1234, @@ -1654,7 +1903,7 @@ static void TestLongLongComparison() wxLongLongWx lls[2]; lls[0] = ls[0]; - lls[1] = ls[1]; + lls[1] = ls[1]; for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ ) { @@ -1681,6 +1930,23 @@ static void TestLongLongComparison() #endif // wxUSE_LONGLONG_WX } +static void TestLongLongPrint() +{ + wxPuts(_T("*** Testing wxLongLong printing ***\n")); + + for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ ) + { + wxLongLong ll = testLongs[n]; + wxPrintf(_T("%ld == %s\n"), testLongs[n], ll.ToString().c_str()); + } + + wxLongLong ll(0x12345678, 0x87654321); + wxPrintf(_T("0x1234567887654321 = %s\n"), ll.ToString().c_str()); + + ll.Negate(); + wxPrintf(_T("-0x1234567887654321 = %s\n"), ll.ToString().c_str()); +} + #undef MAKE_LL #undef RAND_LL @@ -1717,7 +1983,7 @@ static void TestPathList() #ifdef TEST_REGEX -#include +#include "wx/regex.h" static void TestRegExCompile() { @@ -1849,7 +2115,7 @@ static void TestRegExReplacement() }; const wxChar *pattern = _T("([a-z]+)[^0-9]*([0-9]+)"); - wxRegEx re = pattern; + wxRegEx re(pattern); wxPrintf(_T("Using pattern '%s' for replacement.\n"), pattern); @@ -1944,8 +2210,8 @@ static void TestRegExInteractive() #ifdef TEST_REGCONF -#include -#include +#include "wx/confbase.h" +#include "wx/msw/regconf.h" static void TestRegConfWrite() { @@ -1957,7 +2223,7 @@ static void TestRegConfWrite() #ifdef TEST_REGISTRY -#include +#include "wx/msw/registry.h" // I chose this one because I liked its name, but it probably only exists under // NT @@ -2066,9 +2332,9 @@ static void TestRegistryAssociation() #ifdef TEST_SOCKETS -#include -#include -#include +#include "wx/socket.h" +#include "wx/protocol/protocol.h" +#include "wx/protocol/http.h" static void TestSocketServer() { @@ -2198,7 +2464,7 @@ static void TestSocketClient() #ifdef TEST_FTP -#include +#include "wx/protocol/ftp.h" static wxFTP ftp; @@ -2522,8 +2788,8 @@ static void TestFtpUpload() #ifdef TEST_STREAMS -#include -#include +#include "wx/wfstream.h" +#include "wx/mstream.h" static void TestFileStream() { @@ -2575,8 +2841,8 @@ static void TestMemoryStream() #ifdef TEST_TIMER -#include -#include +#include "wx/timer.h" +#include "wx/utils.h" static void TestStopWatch() { @@ -2625,7 +2891,7 @@ static void TestStopWatch() #ifdef TEST_VCARD -#include +#include "wx/vcard.h" static void DumpVObject(size_t level, const wxVCardObject& vcard) { @@ -2867,10 +3133,10 @@ static void TestVCardWrite() #ifdef TEST_WCHAR -#include -#include -#include -#include +#include "wx/strconv.h" +#include "wx/fontenc.h" +#include "wx/encconv.h" +#include "wx/buffer.h" static void TestUtf8() { @@ -3006,8 +3272,8 @@ static void TestZipFileSystem() #ifdef TEST_ZLIB -#include -#include +#include "wx/zstream.h" +#include "wx/wfstream.h" static const wxChar *FILENAME_GZ = _T("test.gz"); static const char *TEST_DATA = "hello and hello again"; @@ -3060,9 +3326,8 @@ static void TestZlibStreamRead() #include -#include - -#include +#include "wx/date.h" +#include "wx/datetime.h" // the test data struct Date @@ -4039,6 +4304,7 @@ static void TestTimeSpanFormat() _T("(with ms) %H:%M:%S:%l"), _T("100%% of minutes is %M"), // test "%%" _T("%D days and %H hours"), + _T("or also %S seconds"), }; wxTimeSpan ts1(1, 2, 3, 4), @@ -4093,7 +4359,7 @@ static void TestTimeCompatibility() #ifdef TEST_THREADS -#include +#include "wx/thread.h" static size_t gs_counter = (size_t)-1; static wxCriticalSection gs_critsect; @@ -4819,6 +5085,10 @@ static void TestStringMatch() // entry point // ---------------------------------------------------------------------------- +#ifdef TEST_SNGLINST + #include "wx/snglinst.h" +#endif // TEST_SNGLINST + int main(int argc, char **argv) { wxInitializer initializer; @@ -4855,15 +5125,22 @@ int main(int argc, char **argv) #endif // TEST_CHARSET #ifdef TEST_CMDLINE + TestCmdLineConvert(); + +#if wxUSE_CMDLINE_PARSER static const wxCmdLineEntryDesc cmdLineDesc[] = { + { wxCMD_LINE_SWITCH, _T("h"), _T("help"), "show this help message", + wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP }, { wxCMD_LINE_SWITCH, "v", "verbose", "be verbose" }, { wxCMD_LINE_SWITCH, "q", "quiet", "be quiet" }, { 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, "d", "date", "output file date", wxCMD_LINE_VAL_DATE }, + { wxCMD_LINE_OPTION, "s", "size", "output block size", + wxCMD_LINE_VAL_NUMBER }, + { wxCMD_LINE_OPTION, "d", "date", "output file date", + wxCMD_LINE_VAL_DATE }, { wxCMD_LINE_PARAM, NULL, NULL, "input file", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE }, @@ -4891,10 +5168,12 @@ int main(int argc, char **argv) wxLogMessage("Syntax error detected, aborting."); break; } +#endif // wxUSE_CMDLINE_PARSER + #endif // TEST_CMDLINE #ifdef TEST_STRINGS - if ( 0 ) + if ( TEST_ALL ) { TestPChar(); TestString(); @@ -4905,63 +5184,71 @@ int main(int argc, char **argv) TestStringTokenizer(); TestStringReplace(); } - TestStringMatch(); + else + { + TestStringMatch(); + } #endif // TEST_STRINGS #ifdef TEST_ARRAYS - if ( 0 ) + if ( TEST_ALL ) { - wxArrayString a1; - a1.Add("tiger"); - a1.Add("cat"); - a1.Add("lion"); - a1.Add("dog"); - a1.Add("human"); - a1.Add("ape"); + wxArrayString a1; + a1.Add("tiger"); + a1.Add("cat"); + a1.Add("lion"); + a1.Add("dog"); + a1.Add("human"); + a1.Add("ape"); - puts("*** Initially:"); + puts("*** Initially:"); - PrintArray("a1", a1); + PrintArray("a1", a1); - wxArrayString a2(a1); - PrintArray("a2", a2); + wxArrayString a2(a1); + PrintArray("a2", a2); - wxSortedArrayString a3(a1); - PrintArray("a3", a3); + wxSortedArrayString a3(a1); + PrintArray("a3", a3); - puts("*** After deleting a string from a1"); - a1.Remove(2); + puts("*** After deleting a string from a1"); + a1.Remove(2); - PrintArray("a1", a1); - PrintArray("a2", a2); - PrintArray("a3", a3); + PrintArray("a1", a1); + PrintArray("a2", a2); + PrintArray("a3", a3); - puts("*** After reassigning a1 to a2 and a3"); - a3 = a2 = a1; - PrintArray("a2", a2); - PrintArray("a3", a3); + puts("*** After reassigning a1 to a2 and a3"); + a3 = a2 = a1; + PrintArray("a2", a2); + PrintArray("a3", a3); - puts("*** After sorting a1"); - a1.Sort(); - PrintArray("a1", a1); + puts("*** After sorting a1"); + a1.Sort(); + PrintArray("a1", a1); - puts("*** After sorting a1 in reverse order"); - a1.Sort(TRUE); - PrintArray("a1", a1); + puts("*** After sorting a1 in reverse order"); + a1.Sort(TRUE); + PrintArray("a1", a1); - puts("*** After sorting a1 by the string length"); - a1.Sort(StringLenCompare); - PrintArray("a1", a1); + puts("*** After sorting a1 by the string length"); + a1.Sort(StringLenCompare); + PrintArray("a1", a1); - TestArrayOfObjects(); + TestArrayOfObjects(); + } + else + { + TestArrayOfInts(); } - TestArrayOfInts(); #endif // TEST_ARRAYS #ifdef TEST_DIR - if ( 0 ) + if ( TEST_ALL ) + { TestDirEnum(); - TestDirTraverse(); + TestDirTraverse(); + } #endif // TEST_DIR #ifdef TEST_DLLLOADER @@ -5008,39 +5295,55 @@ int main(int argc, char **argv) #endif // TEST_LOG #ifdef TEST_FILE - if ( 0 ) + if ( TEST_ALL ) { TestFileRead(); TestTextFileRead(); + TestFileCopy(); } - TestFileCopy(); #endif // TEST_FILE #ifdef TEST_FILENAME - TestFileNameSplit(); - if ( 0 ) + if ( 1 ) + { + wxFileName fn; + fn.Assign("c:\\foo", "bar.baz"); + + DumpFileName(fn); + } + + if ( TEST_ALL ) { TestFileNameConstruction(); + TestFileNameMakeRelative(); + TestFileNameSplit(); + TestFileNameTemp(); TestFileNameCwd(); TestFileNameComparison(); TestFileNameOperations(); } #endif // TEST_FILENAME +#ifdef TEST_FILETIME + TestFileGetTimes(); + TestFileSetTimes(); +#endif // TEST_FILETIME + #ifdef TEST_FTP wxLog::AddTraceMask(FTP_TRACE_MASK); if ( TestFtpConnect() ) { - TestFtpFileSize(); - if ( 0 ) + if ( TEST_ALL ) { TestFtpList(); TestFtpDownload(); TestFtpMisc(); + TestFtpFileSize(); TestFtpUpload(); } - if ( 0 ) - TestFtpInteractive(); + + if ( TEST_INTERACTIVE ) + TestFtpInteractive(); } //else: connecting to the FTP server failed @@ -5076,15 +5379,17 @@ int main(int argc, char **argv) { TestSpeed(); } - if ( 0 ) + + if ( TEST_ALL ) { TestMultiplication(); TestDivision(); TestAddition(); TestLongLongConversion(); TestBitOperations(); + TestLongLongComparison(); + TestLongLongPrint(); } - TestLongLongComparison(); #endif // TEST_LONGLONG #ifdef TEST_HASH @@ -5104,8 +5409,12 @@ int main(int argc, char **argv) #endif // TEST_MIME #ifdef TEST_INFO_FUNCTIONS - TestOsInfo(); - TestUserInfo(); + if ( TEST_ALL ) + { + TestOsInfo(); + TestUserInfo(); + TestDiskInfo(); + } #endif // TEST_INFO_FUNCTIONS #ifdef TEST_PATHLIST @@ -5118,32 +5427,29 @@ int main(int argc, char **argv) #ifdef TEST_REGEX // TODO: write a real test using src/regex/tests file - if ( 0 ) + if ( TEST_ALL ) { TestRegExCompile(); TestRegExMatch(); TestRegExSubmatch(); - TestRegExInteractive(); + TestRegExReplacement(); + + if ( TEST_INTERACTIVE ) + TestRegExInteractive(); } - TestRegExReplacement(); #endif // TEST_REGEX #ifdef TEST_REGISTRY - if ( 0 ) - TestRegistryRead(); + TestRegistryRead(); TestRegistryAssociation(); #endif // TEST_REGISTRY #ifdef TEST_SOCKETS - if ( 0 ) - { - TestSocketServer(); - } - TestSocketClient(); + TestSocketServer(); + TestSocketClient(); #endif // TEST_SOCKETS #ifdef TEST_STREAMS - if ( 0 ) TestFileStream(); TestMemoryStream(); #endif // TEST_STREAMS @@ -5153,7 +5459,7 @@ int main(int argc, char **argv) #endif // TEST_TIMER #ifdef TEST_DATETIME - if ( 0 ) + if ( TEST_ALL ) { TestTimeSet(); TestTimeStatic(); @@ -5168,12 +5474,13 @@ int main(int argc, char **argv) TestTimeArithmetics(); TestTimeHolidays(); TestTimeFormat(); + TestTimeSpanFormat(); TestTimeMS(); TestTimeZoneBug(); } - TestTimeSpanFormat(); - if ( 0 ) + + if ( TEST_INTERACTIVE ) TestDateTimeInteractive(); #endif // TEST_DATETIME @@ -5183,7 +5490,6 @@ int main(int argc, char **argv) #endif // TEST_USLEEP #ifdef TEST_VCARD - if ( 0 ) TestVCardRead(); TestVCardWrite(); #endif // TEST_VCARD @@ -5193,13 +5499,11 @@ int main(int argc, char **argv) #endif // TEST_WCHAR #ifdef TEST_ZIP - if ( 0 ) - TestZipStreamRead(); + TestZipStreamRead(); TestZipFileSystem(); #endif // TEST_ZIP #ifdef TEST_ZLIB - if ( 0 ) TestZlibStreamWrite(); TestZlibStreamRead(); #endif // TEST_ZLIB