X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f1389d464a7570563c4037610e18bcffb96e50fa..3fe70739d2098debccaa2755f054f67fff829a59:/samples/console/console.cpp?ds=sidebyside diff --git a/samples/console/console.cpp b/samples/console/console.cpp index d63263979a..6c365c276a 100644 --- a/samples/console/console.cpp +++ b/samples/console/console.cpp @@ -28,6 +28,7 @@ #include "wx/string.h" #include "wx/file.h" #include "wx/app.h" +#include "wx/log.h" // without this pragma, the stupid compiler precompiles #defines below so that // changing them doesn't "take place" later! @@ -48,7 +49,7 @@ */ // what to test (in alphabetic order)? uncomment the line below to do all tests -#define TEST_ALL +//#define TEST_ALL #ifdef TEST_ALL #define TEST_ARRAYS #define TEST_CHARSET @@ -77,10 +78,12 @@ #define TEST_REGCONF #define TEST_REGEX #define TEST_REGISTRY + #define TEST_SCOPEGUARD #define TEST_SNGLINST #define TEST_SOCKETS #define TEST_STREAMS #define TEST_STRINGS + #define TEST_TEXTSTREAM #define TEST_THREADS #define TEST_TIMER #define TEST_UNICODE @@ -91,20 +94,20 @@ #define TEST_ZLIB #undef TEST_ALL - static const bool TEST_ALL = TRUE; + static const bool TEST_ALL = true; #else - #define TEST_PRINTF + #define TEST_HASHMAP - static const bool TEST_ALL = FALSE; + 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 = TRUE; + static const bool TEST_INTERACTIVE = true; #else - static const bool TEST_INTERACTIVE = FALSE; + static const bool TEST_INTERACTIVE = false; #endif // ---------------------------------------------------------------------------- @@ -205,7 +208,6 @@ static void TestCharset() #include "wx/cmdline.h" #include "wx/datetime.h" -#include "wx/log.h" #if wxUSE_CMDLINE_PARSER @@ -278,7 +280,7 @@ static void TestCmdLineConvert() #ifdef __UNIX__ static const wxChar *ROOTDIR = _T("/"); - static const wxChar *TESTDIR = _T("/usr"); + static const wxChar *TESTDIR = _T("/usr/local/share"); #elif defined(__WXMSW__) static const wxChar *ROOTDIR = _T("c:\\"); static const wxChar *TESTDIR = _T("d:\\"); @@ -405,6 +407,7 @@ static void TestDirTraverse() } // enum again with custom traverser + wxPuts(_T("Now enumerating directories:")); wxDir dir(TESTDIR); DirPrintTraverser traverser; dir.Traverse(traverser, _T(""), wxDIR_DIRS | wxDIR_HIDDEN); @@ -568,7 +571,7 @@ static void TestExecute() wxPrintf(_T("Testing wxExecute: ")); fflush(stdout); - if ( wxExecute(COMMAND, TRUE /* sync */) == 0 ) + if ( wxExecute(COMMAND, true /* sync */) == 0 ) wxPuts(_T("Ok.")); else wxPuts(_T("ERROR.")); @@ -796,6 +799,12 @@ static void TestFileConfRead() cont = fileconf.GetNextEntry(name, dummy); } + + static const wxChar *testEntry = _T("TestEntry"); + wxPrintf(_T("\nTesting deletion of newly created \"Test\" entry: ")); + fileconf.Write(testEntry, _T("A value")); + fileconf.DeleteEntry(testEntry); + wxPrintf(fileconf.HasEntry(testEntry) ? _T("ERROR\n") : _T("ok\n")); } #endif // TEST_FILECONF @@ -851,39 +860,39 @@ static struct FileNameInfo } 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 }, + { _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 }, + { _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 }, + { _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 }, + { _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() @@ -1033,6 +1042,24 @@ static void TestFileNameMakeRelative() } } +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(_T("")); +} + static void TestFileNameComparison() { // TODO! @@ -1122,9 +1149,44 @@ static void TestHash() { wxPuts(_T("*** Testing wxHashTable ***\n")); + { + wxHashTable hash(wxKEY_INTEGER), hash2(wxKEY_STRING); + int i; + + for ( i = 0; i < 100; ++i ) + hash.Put(i, (wxObject*)&i + i); + + hash.BeginFind(); + wxHashTable::compatibility_iterator it = hash.Next(); + i = 0; + + while (it) + { + ++i; + it = hash.Next(); + } + + if (i != 100) + wxPuts(_T("Error in wxHashTable::compatibility_iterator\n")); + + for ( i = 99; i >= 0; --i ) + if( hash.Get(i) != (wxObject*)&i + i ) + wxPuts(_T("Error in wxHashTable::Get/Put\n")); + + hash2.Put("foo", (wxObject*)&i + 1); + hash2.Put("bar", (wxObject*)&i + 2); + hash2.Put("baz", (wxObject*)&i + 3); + + if (hash2.Get("moo") != NULL) + wxPuts(_T("Error in wxHashTable::Get\n")); + + if (hash2.Get("bar") != (wxObject*)&i + 2) + wxPuts(_T("Error in wxHashTable::Get/Put\n")); + } +#if !wxUSE_STL { wxHashFoos hash; - hash.DeleteContents(TRUE); + hash.DeleteContents(true); wxPrintf(_T("Hash created: %u foos in hash, %u foos totally\n"), hash.GetCount(), Foo::count); @@ -1171,8 +1233,10 @@ static void TestHash() wxPuts(_T("ok (not found)")); } } +#endif wxPrintf(_T("Hash destroyed: %u foos left\n"), Foo::count); + wxPuts(_T("*** Testing wxHashTable finished ***\n")); } #endif // TEST_HASH @@ -1335,6 +1399,104 @@ 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")); @@ -1353,7 +1515,11 @@ static void TestListCtor() wxPrintf(_T("After 2nd list creation: %u and %u objects in the lists, %u objects total.\n"), list1.GetCount(), list2.GetCount(), Bar::GetNumber()); - list1.DeleteContents(TRUE); +#if !wxUSE_STL + list1.DeleteContents(true); +#else + WX_CLEAR_LIST(wxListBars, list1); +#endif } wxPrintf(_T("After list destruction: %u objects left.\n"), Bar::GetNumber()); @@ -1766,7 +1932,7 @@ static void TestMimeFilename() wxFileType::MessageParameters(fname, _T(""))) ) cmd = _T(""); else - cmd = wxString('"') + cmd + '"'; + cmd = wxString(_T('"')) + cmd + _T('"'); wxPrintf(_T("To open %s (%s) do %s.\n"), fname.c_str(), desc.c_str(), cmd.c_str()); @@ -2169,9 +2335,9 @@ static void TestLongLongComparison() #endif // wxUSE_LONGLONG_WX } -static void TestLongLongPrint() +static void TestLongLongToString() { - wxPuts(_T("*** Testing wxLongLong printing ***\n")); + wxPuts(_T("*** Testing wxLongLong::ToString() ***\n")); for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ ) { @@ -2186,6 +2352,20 @@ static void TestLongLongPrint() wxPrintf(_T("-0x1234567887654321 = %s\n"), ll.ToString().c_str()); } +static void TestLongLongPrintf() +{ + wxPuts(_T("*** Testing wxLongLong printing ***\n")); + +#ifdef wxLongLongFmtSpec + wxLongLong ll = wxLL(0x1234567890abcdef); + wxString s = wxString::Format(_T("%") wxLongLongFmtSpec _T("x"), ll); + wxPrintf(_T("0x1234567890abcdef -> %s (%s)\n"), + s.c_str(), s == _T("1234567890abcdef") ? _T("ok") : _T("ERROR")); +#else // !wxLongLongFmtSpec + #error "wxLongLongFmtSpec not defined for this compiler/platform" +#endif +} + #undef MAKE_LL #undef RAND_LL @@ -2240,26 +2420,26 @@ static void TestRegExCompile() bool correct; } regExCompTestData[] = { - { _T("foo"), TRUE }, - { _T("foo("), FALSE }, - { _T("foo(bar"), FALSE }, - { _T("foo(bar)"), TRUE }, - { _T("foo["), FALSE }, - { _T("foo[bar"), FALSE }, - { _T("foo[bar]"), TRUE }, - { _T("foo{"), TRUE }, - { _T("foo{1"), FALSE }, - { _T("foo{bar"), TRUE }, - { _T("foo{1}"), TRUE }, - { _T("foo{1,2}"), TRUE }, - { _T("foo{bar}"), TRUE }, - { _T("foo*"), TRUE }, - { _T("foo**"), FALSE }, - { _T("foo+"), TRUE }, - { _T("foo++"), FALSE }, - { _T("foo?"), TRUE }, - { _T("foo??"), FALSE }, - { _T("foo?+"), FALSE }, + { _T("foo"), true }, + { _T("foo("), false }, + { _T("foo(bar"), false }, + { _T("foo(bar)"), true }, + { _T("foo["), false }, + { _T("foo[bar"), false }, + { _T("foo[bar]"), true }, + { _T("foo{"), true }, + { _T("foo{1"), false }, + { _T("foo{bar"), true }, + { _T("foo{1}"), true }, + { _T("foo{1,2}"), true }, + { _T("foo{bar}"), true }, + { _T("foo*"), true }, + { _T("foo**"), false }, + { _T("foo+"), true }, + { _T("foo++"), false }, + { _T("foo?"), true }, + { _T("foo??"), false }, + { _T("foo?+"), false }, }; wxRegEx re; @@ -2286,12 +2466,12 @@ static void TestRegExMatch() bool correct; } regExMatchTestData[] = { - { _T("foo"), _T("bar"), FALSE }, - { _T("foo"), _T("foobar"), TRUE }, - { _T("^foo"), _T("foobar"), TRUE }, - { _T("^foo"), _T("barfoo"), FALSE }, - { _T("bar$"), _T("barbar"), TRUE }, - { _T("bar$"), _T("barbar "), FALSE }, + { _T("foo"), _T("bar"), false }, + { _T("foo"), _T("foobar"), true }, + { _T("^foo"), _T("foobar"), true }, + { _T("^foo"), _T("barfoo"), false }, + { _T("bar$"), _T("barbar"), true }, + { _T("bar$"), _T("barbar "), false }, }; for ( size_t n = 0; n < WXSIZEOF(regExMatchTestData); n++ ) @@ -2713,7 +2893,7 @@ I am ready for my first lesson today."); { wxChar buf[200]; - wxSprintf (buf, _T("%07Lo"), (wxLongLong_t)040000000000); + wxSprintf(buf, _T("%07") wxLongLongFmtSpec _T("o"), wxLL(040000000000)); wxPrintf (_T("sprintf (buf, \"%%07Lo\", 040000000000ll) = %s"), buf); if (wxStrcmp (buf, _T("40000000000")) != 0) @@ -2945,6 +3125,42 @@ static void TestRegistryAssociation() #endif // TEST_REGISTRY +// ---------------------------------------------------------------------------- +// scope guard +// ---------------------------------------------------------------------------- + +#ifdef TEST_SCOPEGUARD + +#include "wx/scopeguard.h" + +static void function0() { puts("function0()"); } +static void function1(int n) { printf("function1(%d)\n", n); } +static void function2(double x, char c) { printf("function2(%g, %c)\n", x, c); } + +struct Object +{ + void method0() { printf("method0()\n"); } + void method1(int n) { printf("method1(%d)\n", n); } + void method2(double x, char c) { printf("method2(%g, %c)\n", x, c); } +}; + +static void TestScopeGuard() +{ + ON_BLOCK_EXIT0(function0); + ON_BLOCK_EXIT1(function1, 17); + ON_BLOCK_EXIT2(function2, 3.14, 'p'); + + Object obj; + ON_BLOCK_EXIT_OBJ0(obj, &Object::method0); + ON_BLOCK_EXIT_OBJ1(obj, &Object::method1, 7); + ON_BLOCK_EXIT_OBJ2(obj, &Object::method2, 2.71, 'e'); + + wxScopeGuard dismissed = wxMakeGuard(function0); + dismissed.Dismiss(); +} + +#endif + // ---------------------------------------------------------------------------- // sockets // ---------------------------------------------------------------------------- @@ -2972,7 +3188,8 @@ static void TestSocketServer() return; } - for ( ;; ) + bool quit = false; + while ( !quit ) { wxPrintf(_T("Server: waiting for connection on port %d...\n"), PORT); @@ -2987,7 +3204,8 @@ static void TestSocketServer() server->SetTimeout(60); // 1 min - while ( socket->IsConnected() ) + bool close = false; + while ( !close && socket->IsConnected() ) { wxString s; wxChar ch = _T('\0'); @@ -3019,19 +3237,31 @@ static void TestSocketServer() } wxPrintf(_T("Server: got '%s'.\n"), s.c_str()); - if ( s == _T("bye") ) + if ( s == _T("close") ) { - delete socket; + wxPuts(_T("Closing connection")); - break; + close = true; } + else if ( s == _T("quit") ) + { + close = + quit = true; - socket->Write(s.MakeUpper().c_str(), s.length()); - socket->Write("\r\n", 2); - wxPrintf(_T("Server: wrote '%s'.\n"), s.c_str()); + wxPuts(_T("Shutting down the server")); + } + else // not a special command + { + socket->Write(s.MakeUpper().c_str(), s.length()); + socket->Write("\r\n", 2); + wxPrintf(_T("Server: wrote '%s'.\n"), s.c_str()); + } } - wxPuts(_T("Server: lost a client.")); + if ( !close ) + { + wxPuts(_T("Server: lost a client unexpectedly.")); + } socket->Destroy(); } @@ -3126,7 +3356,7 @@ static bool TestFtpConnect() { wxPrintf(_T("ERROR: failed to connect to %s\n"), hostname); - return FALSE; + return false; } else { @@ -3134,7 +3364,7 @@ static bool TestFtpConnect() hostname, ftp.Pwd().c_str()); } - return TRUE; + return true; } // test (fixed?) wxFTP bug with wu-ftpd >= 2.6.0? @@ -3156,7 +3386,7 @@ static void TestFtpWuFtpd() } else { - size_t size = in->StreamSize(); + size_t size = in->GetSize(); wxPrintf(_T("Reading file %s (%u bytes)..."), filename, size); wxChar *data = new wxChar[size]; @@ -3239,7 +3469,7 @@ static void TestFtpDownload() } else { - size_t size = in->StreamSize(); + size_t size = in->GetSize(); wxPrintf(_T("Reading file %s (%u bytes)..."), filename, size); fflush(stdout); @@ -3858,7 +4088,7 @@ static void TestUnicodeToFromAscii() #include "wx/encconv.h" #include "wx/buffer.h" -static const unsigned char textInUtf8_[] = +static const unsigned char utf8koi8r[] = { 208, 157, 208, 181, 209, 129, 208, 186, 208, 176, 208, 183, 208, 176, 208, 189, 208, 189, 208, 190, 32, 208, 191, 208, 190, 209, 128, 208, @@ -3869,7 +4099,36 @@ static const unsigned char textInUtf8_[] = 178, 208, 190, 209, 129, 209, 130, 209, 140, 209, 142, 0 }; -#define textInUtf8 ((const char *)textInUtf8_) +static const unsigned char utf8iso8859_1[] = +{ + 0x53, 0x79, 0x73, 0x74, 0xc3, 0xa8, 0x6d, 0x65, 0x73, 0x20, 0x49, 0x6e, + 0x74, 0xc3, 0xa9, 0x67, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x65, + 0x6e, 0x20, 0x4d, 0xc3, 0xa9, 0x63, 0x61, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x69, 0x71, 0x75, 0x65, 0x20, 0x65, + 0x74, 0x20, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x71, 0x75, 0x65, 0 +}; + +static const unsigned char utf8Invalid[] = +{ + 0x3c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x3e, 0x32, 0x30, 0x30, + 0x32, 0xe5, 0xb9, 0xb4, 0x30, 0x39, 0xe6, 0x9c, 0x88, 0x32, 0x35, 0xe6, + 0x97, 0xa5, 0x20, 0x30, 0x37, 0xe6, 0x99, 0x82, 0x33, 0x39, 0xe5, 0x88, + 0x86, 0x35, 0x37, 0xe7, 0xa7, 0x92, 0x3c, 0x2f, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0 +}; + +static const struct Utf8Data +{ + const unsigned char *text; + size_t len; + const wxChar *charset; + wxFontEncoding encoding; +} utf8data[] = +{ + { utf8Invalid, WXSIZEOF(utf8Invalid), _T("iso8859-1"), wxFONTENCODING_ISO8859_1 }, + { utf8koi8r, WXSIZEOF(utf8koi8r), _T("koi8-r"), wxFONTENCODING_KOI8 }, + { utf8iso8859_1, WXSIZEOF(utf8iso8859_1), _T("iso8859-1"), wxFONTENCODING_ISO8859_1 }, +}; static void TestUtf8() { @@ -3877,30 +4136,33 @@ static void TestUtf8() char buf[1024]; wchar_t wbuf[1024]; - if ( wxConvUTF8.MB2WC(wbuf, textInUtf8, WXSIZEOF(textInUtf8)) <= 0 ) - { - wxPuts(_T("ERROR: UTF-8 decoding failed.")); - } - else + + for ( size_t n = 0; n < WXSIZEOF(utf8data); n++ ) { - wxCSConv conv(_T("koi8-r")); - if ( conv.WC2MB(buf, wbuf, 0 /* not needed wcslen(wbuf) */) <= 0 ) + const Utf8Data& u8d = utf8data[n]; + if ( wxConvUTF8.MB2WC(wbuf, (const char *)u8d.text, + WXSIZEOF(wbuf)) == (size_t)-1 ) { - wxPuts(_T("ERROR: conversion to KOI8-R failed.")); + wxPuts(_T("ERROR: UTF-8 decoding failed.")); } else { - wxPrintf(_T("The resulting string (in KOI8-R): %s\n"), buf); + wxCSConv conv(u8d.charset); + if ( conv.WC2MB(buf, wbuf, WXSIZEOF(buf)) == (size_t)-1 ) + { + wxPrintf(_T("ERROR: conversion to %s failed.\n"), u8d.charset); + } + else + { + wxPrintf(_T("String in %s: %s\n"), u8d.charset, buf); + } } - } - if ( wxConvUTF8.WC2MB(buf, L"à la", WXSIZEOF(buf)) <= 0 ) - { - wxPuts(_T("ERROR: conversion to UTF-8 failed.")); - } - else - { - wxPrintf(_T("The string in UTF-8: %s\n"), buf); + wxString s(wxConvUTF8.cMB2WC((const char *)u8d.text), *wxConvCurrent); + if ( s.empty() ) + s = _T("<< conversion failed >>"); + wxPrintf(_T("String in current cset: %s\n"), s.c_str()); + } wxPuts(_T("")); @@ -3913,7 +4175,8 @@ static void TestEncodingConverter() // using wxEncodingConverter should give the same result as above char buf[1024]; wchar_t wbuf[1024]; - if ( wxConvUTF8.MB2WC(wbuf, textInUtf8, WXSIZEOF(textInUtf8)) <= 0 ) + if ( wxConvUTF8.MB2WC(wbuf, (const char *)utf8koi8r, + WXSIZEOF(utf8koi8r)) == (size_t)-1 ) { wxPuts(_T("ERROR: UTF-8 decoding failed.")); } @@ -3922,7 +4185,7 @@ static void TestEncodingConverter() wxEncodingConverter ec; ec.Init(wxFONTENCODING_UNICODE, wxFONTENCODING_KOI8); ec.Convert(wbuf, buf); - wxPrintf(_T("The same string obtained using wxEC: %s\n"), buf); + wxPrintf(_T("The same KOI8-R string using wxEC: %s\n"), buf); } wxPuts(_T("")); @@ -4075,7 +4338,6 @@ static void TestZlibStreamRead() #include -#include "wx/date.h" #include "wx/datetime.h" // the test data @@ -4181,8 +4443,8 @@ static void TestTimeStatic() // first line: the years to test { 1990, 1976, 2000, 2030, 1984, }, - // second line: TRUE if leap, FALSE otherwise - { FALSE, TRUE, TRUE, FALSE, TRUE } + // second line: true if leap, false otherwise + { false, true, true, false, true } }; for ( size_t n = 0; n < nYears; n++ ) @@ -4589,12 +4851,8 @@ for n in range(20): wxPrintf(_T(" (ERROR: should be %d)"), wn.dnum); } - wxPrintf(_T(", week in month is %d"), wmon); - if ( wmon == wn.wmon ) - { - wxPrintf(_T(" (ok)")); - } - else + wxPrintf(_T(", week in month = %d"), wmon); + if ( wmon != wn.wmon ) { wxPrintf(_T(" (ERROR: should be %d)"), wn.wmon); } @@ -4609,14 +4867,22 @@ for n in range(20): wxPrintf(_T(" (ERROR: should be %d)"), wn.wmon2); } - wxPrintf(_T(", week in year is %d"), week); - if ( week == wn.week ) + wxPrintf(_T(", week in year = %d"), week); + if ( week != wn.week ) { - wxPuts(_T(" (ok)")); + wxPrintf(_T(" (ERROR: should be %d)"), wn.week); } - else + + wxPutchar(_T('\n')); + + wxDateTime dt2(1, wxDateTime::Jan, d.year); + dt2.SetToTheWeek(wn.week, dt.GetWeekDay()); + if ( dt2 != dt ) { - wxPrintf(_T(" (ERROR: should be %d)\n"), wn.week); + Date d2; + d2.Init(dt2.GetTm()); + wxPrintf(_T("ERROR: SetToTheWeek() returned %s\n"), + d2.FormatDate().c_str()); } } } @@ -4780,7 +5046,7 @@ static void TestTimeFormat() } else { - bool equal = FALSE; // suppress compilaer warning + bool equal = false; // suppress compilaer warning switch ( kind ) { case CompareBoth: @@ -4824,8 +5090,8 @@ static void TestTimeParse() static const ParseTestData parseTestDates[] = { - { _T("Sat, 18 Dec 1999 00:46:40 +0100"), { 18, wxDateTime::Dec, 1999, 00, 46, 40 }, TRUE }, - { _T("Wed, 1 Dec 1999 05:17:20 +0300"), { 1, wxDateTime::Dec, 1999, 03, 17, 20 }, TRUE }, + { _T("Sat, 18 Dec 1999 00:46:40 +0100"), { 18, wxDateTime::Dec, 1999, 00, 46, 40 }, true }, + { _T("Wed, 1 Dec 1999 05:17:20 +0300"), { 1, wxDateTime::Dec, 1999, 03, 17, 20 }, true }, }; for ( size_t n = 0; n < WXSIZEOF(parseTestDates); n++ ) @@ -5071,39 +5337,46 @@ static void TestTimeSpanFormat() wxPuts(_T("")); } -#if 0 +#endif // TEST_DATETIME -// test compatibility with the old wxDate/wxTime classes -static void TestTimeCompatibility() -{ - wxPuts(_T("\n*** wxDateTime compatibility test ***")); +// ---------------------------------------------------------------------------- +// wxTextInput/OutputStream +// ---------------------------------------------------------------------------- - wxPrintf(_T("wxDate for JDN 0: %s\n"), wxDate(0l).FormatDate().c_str()); - wxPrintf(_T("wxDate for MJD 0: %s\n"), wxDate(2400000).FormatDate().c_str()); +#ifdef TEST_TEXTSTREAM - double jdnNow = wxDateTime::Now().GetJDN(); - long jdnMidnight = (long)(jdnNow - 0.5); - wxPrintf(_T("wxDate for today: %s\n"), wxDate(jdnMidnight).FormatDate().c_str()); +#include "wx/txtstrm.h" +#include "wx/wfstream.h" - jdnMidnight = wxDate().Set().GetJulianDate(); - wxPrintf(_T("wxDateTime for today: %s\n"), - wxDateTime((double)(jdnMidnight + 0.5)).Format("%c", wxDateTime::GMT0).c_str()); +static void TestTextInputStream() +{ + wxPuts(_T("\n*** wxTextInputStream test ***")); - int flags = wxEUROPEAN;//wxFULL; - wxDate date; - date.Set(); - wxPrintf(_T("Today is %s\n"), date.FormatDate(flags).c_str()); - for ( int n = 0; n < 7; n++ ) + wxFileInputStream fsIn(_T("testdata.fc")); + if ( !fsIn.Ok() ) { - wxPrintf(_T("Previous %s is %s\n"), - wxDateTime::GetWeekDayName((wxDateTime::WeekDay)n), - date.Previous(n + 1).FormatDate(flags).c_str()); + wxPuts(_T("ERROR: couldn't open file.")); } -} + else + { + wxTextInputStream tis(fsIn); -#endif // 0 + size_t line = 1; + for ( ;; ) + { + const wxString s = tis.ReadLine(); -#endif // TEST_DATETIME + // line could be non empty if the last line of the file isn't + // terminated with EOL + if ( fsIn.Eof() && s.empty() ) + break; + + wxPrintf(_T("Line %d: %s\n"), line++, s.c_str()); + } + } +} + +#endif // TEST_TEXTSTREAM // ---------------------------------------------------------------------------- // threads @@ -5151,7 +5424,7 @@ public: { m_n = n; m_ch = ch; - m_cancelled = FALSE; + m_cancelled = false; Create(); } @@ -5166,7 +5439,7 @@ private: size_t m_n; // number of characters to write wxChar m_ch; // character to write - bool m_cancelled; // FALSE if we exit normally + bool m_cancelled; // false if we exit normally }; wxThread::ExitCode MyDetachedThread::Entry() @@ -5183,7 +5456,7 @@ wxThread::ExitCode MyDetachedThread::Entry() { if ( TestDestroy() ) { - m_cancelled = TRUE; + m_cancelled = true; break; } @@ -5586,6 +5859,17 @@ static void PrintArray(const wxChar* name, const wxArrayString& array) } } +static void PrintArray(const wxChar* name, const wxSortedArrayString& array) +{ + wxPrintf(_T("Dump of the array '%s'\n"), name); + + size_t nCount = array.GetCount(); + for ( size_t n = 0; n < nCount; n++ ) + { + wxPrintf(_T("\t%s[%u] = '%s'\n"), name, n, array[n].c_str()); + } +} + int wxCMPFUNC_CONV StringLenCompare(const wxString& first, const wxString& second) { @@ -5650,6 +5934,53 @@ static void TestArrayOf ## name ## s() \ TestArrayOf(UShort); TestArrayOf(Int); +static void TestStlArray() +{ + wxPuts(_T("*** Testing std::vector operations ***\n")); + + { + wxArrayInt list1; + wxArrayInt::iterator it, en; + wxArrayInt::reverse_iterator rit, ren; + int i; + for ( i = 0; i < 5; ++i ) + list1.push_back(i); + + for ( it = list1.begin(), en = list1.end(), i = 0; + it != en; ++it, ++i ) + if ( *it != i ) + wxPuts(_T("Error in iterator\n")); + + for ( rit = list1.rbegin(), ren = list1.rend(), i = 4; + rit != ren; ++rit, --i ) + if ( *rit != i ) + wxPuts(_T("Error in reverse_iterator\n")); + + if ( *list1.rbegin() != *(list1.end()-1) || + *list1.begin() != *(list1.rend()-1) ) + wxPuts(_T("Error in iterator/reverse_iterator\n")); + + it = list1.begin()+1; + rit = list1.rbegin()+1; + if ( *list1.begin() != *(it-1) || + *list1.rbegin() != *(rit-1) ) + wxPuts(_T("Error in iterator/reverse_iterator\n")); + + if ( list1.front() != 0 || list1.back() != 4 ) + wxPuts(_T("Error in front()/back()\n")); + + list1.erase(list1.begin()); + list1.erase(list1.end()-1); + + for ( it = list1.begin(), en = list1.end(), i = 1; + it != en; ++it, ++i ) + if ( *it != i ) + wxPuts(_T("Error in erase()\n")); + } + + wxPuts(_T("*** Testing std::vector operations finished ***\n")); +} + static void TestArrayOfObjects() { wxPuts(_T("*** Testing wxObjArray ***\n")); @@ -5737,14 +6068,14 @@ static void TestString() for (int i = 0; i < 1000000; ++i) { - a = "Hello"; - b = " world"; - c = "! How'ya doin'?"; + a = _T("Hello"); + b = _T(" world"); + c = _T("! How'ya doin'?"); a += b; a += c; - c = "Hello world! What's up?"; + c = _T("Hello world! What's up?"); if (c != a) - c = "Doh!"; + c = _T("Doh!"); } wxPrintf(_T("TestString elapsed time: %ld\n"), sw.Time()); @@ -5775,7 +6106,7 @@ static void TestPChar() static void TestStringSub() { - wxString s("Hello, world!"); + wxString s(_T("Hello, world!")); wxPuts(_T("*** Testing wxString substring extraction ***")); @@ -5802,7 +6133,7 @@ static void TestStringSub() { wxString prefix = prefixes[n], rest; bool rc = s.StartsWith(prefix, &rest); - wxPrintf(_T("StartsWith('%s') = %s"), prefix.c_str(), rc ? _T("TRUE") : _T("FALSE")); + wxPrintf(_T("StartsWith('%s') = %s"), prefix.c_str(), rc ? _T("true") : _T("false")); if ( rc ) { wxPrintf(_T(" (the rest is '%s')\n"), rest.c_str()); @@ -6072,6 +6403,180 @@ static void TestStringMatch() wxPuts(_T("")); } +// Sigh, I want Test::Simple, Test::More and Test::Harness... +void ok(int line, bool ok, const wxString& msg = wxEmptyString) +{ + if( !ok ) + wxPuts(_T("NOT OK: (") + wxString::Format(_T("%d"), line) + + _T(") ") + msg); +} + +void is(int line, const wxString& got, const wxString& expected, + const wxString& msg = wxEmptyString) +{ + bool isOk = got == expected; + ok(line, isOk, msg); + if( !isOk ) + { + wxPuts(_T("Got: ") + got); + wxPuts(_T("Expected: ") + expected); + } +} + +void is(int line, const wxChar& got, const wxChar& expected, + const wxString& msg = wxEmptyString) +{ + bool isOk = got == expected; + ok(line, isOk, msg); + if( !isOk ) + { + wxPuts("Got: " + got); + wxPuts("Expected: " + expected); + } +} + +void TestStdString() +{ + wxPuts(_T("*** Testing std::string operations ***\n")); + + // test ctors + wxString s1(_T("abcdefgh")), + s2(_T("abcdefghijklm"), 8), + s3(_T("abcdefghijklm")), + s4(8, _T('a')); + wxString s5(s1), + s6(s3, 0, 8), + s7(s3.begin(), s3.begin() + 8); + wxString s8(s1, 4, 8), s9, s10, s11; + + is( __LINE__, s1, _T("abcdefgh") ); + is( __LINE__, s2, s1 ); + is( __LINE__, s4, _T("aaaaaaaa") ); + is( __LINE__, s5, _T("abcdefgh") ); + is( __LINE__, s6, s1 ); + is( __LINE__, s7, s1 ); + is( __LINE__, s8, _T("efgh") ); + + // test append + s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = _T("abc"); + s1.append(_T("def")); + s2.append(_T("defgh"), 3); + s3.append(wxString(_T("abcdef")), 3, 6); + s4.append(s1); + s5.append(3, _T('a')); + s6.append(s1.begin() + 3, s1.end()); + + is( __LINE__, s1, _T("abcdef") ); + is( __LINE__, s2, _T("abcdef") ); + is( __LINE__, s3, _T("abcdef") ); + is( __LINE__, s4, _T("abcabcdef") ); + is( __LINE__, s5, _T("abcaaa") ); + is( __LINE__, s6, _T("abcdef") ); + + // test assign + s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = _T("abc"); + s1.assign(_T("def")); + s2.assign(_T("defgh"), 3); + s3.assign(wxString(_T("abcdef")), 3, 6); + s4.assign(s1); + s5.assign(3, _T('a')); + s6.assign(s1.begin() + 1, s1.end()); + + is( __LINE__, s1, _T("def") ); + is( __LINE__, s2, _T("def") ); + is( __LINE__, s3, _T("def") ); + is( __LINE__, s4, _T("def") ); + is( __LINE__, s5, _T("aaa") ); + is( __LINE__, s6, _T("ef") ); + + // test compare + s1 = _T("abcdefgh"); + s2 = _T("abcdefgh"); + s3 = _T("abc"); + s4 = _T("abcdefghi"); + s5 = _T("aaa"); + s6 = _T("zzz"); + s7 = _T("zabcdefg"); + + ok( __LINE__, s1.compare(s2) == 0 ); + ok( __LINE__, s1.compare(s3) > 0 ); + ok( __LINE__, s1.compare(s4) < 0 ); + ok( __LINE__, s1.compare(s5) > 0 ); + ok( __LINE__, s1.compare(s6) < 0 ); + ok( __LINE__, s1.compare(1, 12, s1) > 0); + ok( __LINE__, s1.compare(_T("abcdefgh")) == 0); + ok( __LINE__, s1.compare(1, 7, _T("bcdefgh")) == 0); + ok( __LINE__, s1.compare(1, 7, _T("bcdefgh"), 7) == 0); + + // test erase + s1.erase(1, 1); + s2.erase(4, 12); + wxString::iterator it = s3.erase(s3.begin() + 1); + wxString::iterator it2 = s4.erase(s4.begin() + 4, s4.begin() + 6); + wxString::iterator it3 = s7.erase(s7.begin() + 4, s7.begin() + 8); + + is( __LINE__, s1, _T("acdefgh") ); + is( __LINE__, s2, _T("abcd") ); + is( __LINE__, s3, _T("ac") ); + is( __LINE__, s4, _T("abcdghi") ); + is( __LINE__, s7, _T("zabc") ); + is( __LINE__, *it, _T('c') ); + is( __LINE__, *it2, _T('g') ); + ok( __LINE__, it3 == s7.end() ); + + // test insert + s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = _T("aaaa"); + s9 = s10 = _T("cdefg"); + + s1.insert(1, _T("cc") ); + s2.insert(2, _T("cdef"), 3); + s3.insert(2, s10); + s4.insert(2, s10, 3, 7); + s5.insert(1, 2, _T('c')); + it = s6.insert(s6.begin() + 3, _T('X')); + s7.insert(s7.begin(), s9.begin(), s9.end() - 1); + s8.insert(s8.begin(), 2, _T('c')); + + is( __LINE__, s1, _T("accaaa") ); + is( __LINE__, s2, _T("aacdeaa") ); + is( __LINE__, s3, _T("aacdefgaa") ); + is( __LINE__, s4, _T("aafgaa") ); + is( __LINE__, s5, _T("accaaa") ); + is( __LINE__, s6, _T("aaaXa") ); + is( __LINE__, s7, _T("cdefaaaa") ); + is( __LINE__, s8, _T("ccaaaa") ); + + s1 = s2 = s3 = _T("aaaa"); + s1.insert(0, _T("ccc"), 2); + s2.insert(4, _T("ccc"), 2); + + is( __LINE__, s1, _T("ccaaaa") ); + is( __LINE__, s2, _T("aaaacc") ); + + // test replace + s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = _T("QWERTYUIOP"); + s9 = s10 = _T("werty"); + + s1.replace(3, 4, _T("rtyu")); + s1.replace(8, 7, _T("opopop")); + s2.replace(10, 12, _T("WWWW")); + s3.replace(1, 5, s9); + s4.replace(1, 4, s9, 0, 4); + s5.replace(1, 2, s9, 1, 12); + s6.replace(0, 123, s9, 0, 123); + s7.replace(2, 7, s9); + + is( __LINE__, s1, _T("QWErtyuIopopop") ); + is( __LINE__, s2, _T("QWERTYUIOPWWWW") ); + is( __LINE__, s3, _T("QwertyUIOP") ); + is( __LINE__, s4, _T("QwertYUIOP") ); + is( __LINE__, s5, _T("QertyRTYUIOP") ); + is( __LINE__, s6, s9); + is( __LINE__, s7, _T("QWwertyP") ); + + wxPuts(_T("*** Testing std::string operations finished ***\n")); +} + #endif // TEST_STRINGS // ---------------------------------------------------------------------------- @@ -6208,10 +6713,12 @@ int main(int argc, char **argv) { TestStringMatch(); } + + TestStdString(); #endif // TEST_STRINGS #ifdef TEST_ARRAYS - if ( TEST_ALL ) + if ( 1 || TEST_ALL ) { wxArrayString a1; a1.Add(_T("tiger")); @@ -6228,47 +6735,59 @@ int main(int argc, char **argv) wxArrayString a2(a1); PrintArray(_T("a2"), a2); +#if !wxUSE_STL wxSortedArrayString a3(a1); +#else + wxSortedArrayString a3; + for (wxArrayString::iterator it = a1.begin(), en = a1.end(); + it != en; ++it) + a3.Add(*it); +#endif PrintArray(_T("a3"), a3); wxPuts(_T("*** After deleting three strings from a1")); - a1.Remove(2,3); + a1.RemoveAt(2,3); PrintArray(_T("a1"), a1); PrintArray(_T("a2"), a2); PrintArray(_T("a3"), a3); +#if !wxUSE_STL wxPuts(_T("*** After reassigning a1 to a2 and a3")); a3 = a2 = a1; PrintArray(_T("a2"), a2); PrintArray(_T("a3"), a3); +#endif wxPuts(_T("*** After sorting a1")); - a1.Sort(); + a1.Sort(wxStringCompareAscending); PrintArray(_T("a1"), a1); wxPuts(_T("*** After sorting a1 in reverse order")); - a1.Sort(TRUE); + a1.Sort(wxStringCompareDescending); PrintArray(_T("a1"), a1); +#if !wxUSE_STL wxPuts(_T("*** After sorting a1 by the string length")); - a1.Sort(StringLenCompare); + a1.Sort(&StringLenCompare); PrintArray(_T("a1"), a1); +#endif TestArrayOfObjects(); TestArrayOfUShorts(); } TestArrayOfInts(); + TestStlArray(); #endif // TEST_ARRAYS #ifdef TEST_DIR if ( TEST_ALL ) { TestDirExists(); - TestDirTraverse(); + TestDirEnum(); } - TestDirEnum(); + TestDirTraverse(); #endif // TEST_DIR #ifdef TEST_DLLLOADER @@ -6289,6 +6808,7 @@ int main(int argc, char **argv) #ifdef TEST_LIST TestListCtor(); + TestList(); #endif // TEST_LIST #ifdef TEST_LOCALE @@ -6296,12 +6816,17 @@ int main(int argc, char **argv) #endif // TEST_LOCALE #ifdef TEST_LOG + wxPuts(_T("*** Testing wxLog ***")); + wxString s; for ( size_t n = 0; n < 8000; n++ ) { s << (wxChar)(_T('A') + (n % 26)); } + wxLogWarning(_T("The length of the string is %lu"), + (unsigned long)s.length()); + wxString msg; msg.Printf(_T("A very very long message: '%s', the end!\n"), s.c_str()); @@ -6338,6 +6863,7 @@ int main(int argc, char **argv) { TestFileNameConstruction(); TestFileNameMakeRelative(); + TestFileNameMakeAbsolute(); TestFileNameSplit(); TestFileNameTemp(); TestFileNameCwd(); @@ -6391,7 +6917,8 @@ int main(int argc, char **argv) TestLongLongConversion(); TestBitOperations(); TestLongLongComparison(); - TestLongLongPrint(); + TestLongLongToString(); + TestLongLongPrintf(); } #endif // TEST_LONGLONG @@ -6473,6 +7000,10 @@ int main(int argc, char **argv) TestMemoryStream(); #endif // TEST_STREAMS +#ifdef TEST_TEXTSTREAM + TestTextInputStream(); +#endif // TEST_TEXTSTREAM + #ifdef TEST_THREADS int nCPUs = wxThread::GetCPUCount(); wxPrintf(_T("This system has %d CPUs\n"), nCPUs); @@ -6516,12 +7047,17 @@ int main(int argc, char **argv) TestTimeZoneBug(); } - TestTimeFormat(); + + TestTimeWNumber(); if ( TEST_INTERACTIVE ) TestDateTimeInteractive(); #endif // TEST_DATETIME +#ifdef TEST_SCOPEGUARD + TestScopeGuard(); +#endif + #ifdef TEST_USLEEP wxPuts(_T("Sleeping for 3 seconds... z-z-z-z-z...")); wxUsleep(3000);