#include "wx/defs.h"
-#if wxUSE_GUI
- #error "This sample can't be compiled in GUI mode."
-#endif // wxUSE_GUI
-
#include <stdio.h>
#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!
*/
// 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
#define TEST_FTP
#define TEST_HASH
#define TEST_HASHMAP
+ #define TEST_HASHSET
#define TEST_INFO_FUNCTIONS
#define TEST_LIST
#define TEST_LOCALE
#define TEST_MIME
#define TEST_PATHLIST
#define TEST_ODBC
+ #define TEST_PRINTF
#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
#define TEST_ZLIB
#undef TEST_ALL
- static const bool TEST_ALL = TRUE;
+ static const bool TEST_ALL = true;
#else
- #define TEST_DATETIME
+ #define TEST_STRINGS
- 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
// ----------------------------------------------------------------------------
#include "wx/cmdline.h"
#include "wx/datetime.h"
-#include "wx/log.h"
#if wxUSE_CMDLINE_PARSER
#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:\\");
TestDirEnumHelper(dir, wxDIR_DEFAULT | wxDIR_DOTDOT);
wxPuts(_T("Enumerating object files in current directory:"));
- TestDirEnumHelper(dir, wxDIR_DEFAULT, "*.o*");
+ TestDirEnumHelper(dir, wxDIR_DEFAULT, _T("*.o*"));
wxPuts(_T("Enumerating directories in current directory:"));
TestDirEnumHelper(dir, wxDIR_DIRS);
TestDirEnumHelper(dir, wxDIR_FILES | wxDIR_HIDDEN);
wxPuts(_T("Enumerating files in non existing directory:"));
- wxDir dirNo("nosuchdir");
+ wxDir dirNo(_T("nosuchdir"));
TestDirEnumHelper(dirNo);
}
}
// enum again with custom traverser
+ wxPuts(_T("Now enumerating directories:"));
wxDir dir(TESTDIR);
DirPrintTraverser traverser;
dir.Traverse(traverser, _T(""), wxDIR_DIRS | wxDIR_HIDDEN);
wxPrintf(_T("Testing wxShell: "));
fflush(stdout);
- if ( wxShell(SHELL_COMMAND) )
+ if ( wxShell(_T(SHELL_COMMAND)) )
wxPuts(_T("Ok."));
else
wxPuts(_T("ERROR."));
wxPrintf(_T("Testing wxExecute: "));
fflush(stdout);
- if ( wxExecute(COMMAND, TRUE /* sync */) == 0 )
+ if ( wxExecute(_T(COMMAND), true /* sync */) == 0 )
wxPuts(_T("Ok."));
else
wxPuts(_T("ERROR."));
wxPrintf(_T("Testing wxExecute with redirection:\n"));
wxArrayString output;
- if ( wxExecute(REDIRECT_COMMAND, output) != 0 )
+ if ( wxExecute(_T(REDIRECT_COMMAND), output) != 0 )
{
wxPuts(_T("ERROR."));
}
}
else
{
- wxFFile f1(filename1, "rb"),
- f2(filename2, "rb");
+ wxFFile f1(filename1, _T("rb")),
+ f2(filename2, _T("rb"));
if ( !f1.IsOpened() || !f2.IsOpened() )
{
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
} 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()
switch ( fni.format )
{
case wxPATH_UNIX:
- base = "/usr/bin/";
+ base = _T("/usr/bin/");
break;
case wxPATH_DOS:
- base = "c:\\";
+ base = _T("c:\\");
break;
case wxPATH_MAC:
case wxPATH_NATIVE: // make gcc happy
default:
- wxFAIL_MSG( "unexpected path format" );
+ wxFAIL_MSG( _T("unexpected path format") );
}
wxPrintf(_T("'%s' relative to '%s': "),
}
}
+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!
{
wxPuts(_T("*** Testing wxHashTable ***\n"));
+ {
+ wxHashTable hash(wxKEY_INTEGER, 10), hash2(wxKEY_STRING);
+ wxObject o;
+ int i;
+
+ for ( i = 0; i < 100; ++i )
+ hash.Put(i, &o + 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) != &o + i )
+ wxPuts(_T("Error in wxHashTable::Get/Put\n"));
+
+ for ( i = 0; i < 100; ++i )
+ hash.Put(i, &o + i + 20);
+
+ for ( i = 99; i >= 0; --i )
+ if( hash.Get(i) != &o + i)
+ wxPuts(_T("Error (2) in wxHashTable::Get/Put\n"));
+
+ for ( i = 0; i < 50; ++i )
+ if( hash.Delete(i) != &o + i)
+ wxPuts(_T("Error in wxHashTable::Delete\n"));
+
+ for ( i = 50; i < 100; ++i )
+ if( hash.Get(i) != &o + i)
+ wxPuts(_T("Error (3) in wxHashTable::Get/Put\n"));
+
+ for ( i = 0; i < 50; ++i )
+ if( hash.Get(i) != &o + i + 20)
+ wxPuts(_T("Error (4) in wxHashTable::Put/Delete\n"));
+
+ for ( i = 0; i < 50; ++i )
+ if( hash.Delete(i) != &o + i + 20)
+ wxPuts(_T("Error (2) in wxHashTable::Delete\n"));
+
+ for ( i = 0; i < 50; ++i )
+ if( hash.Get(i) != NULL)
+ wxPuts(_T("Error (5) in wxHashTable::Put/Delete\n"));
+
+ hash2.Put(_T("foo"), &o + 1);
+ hash2.Put(_T("bar"), &o + 2);
+ hash2.Put(_T("baz"), &o + 3);
+
+ if (hash2.Get(_T("moo")) != NULL)
+ wxPuts(_T("Error in wxHashTable::Get\n"));
+
+ if (hash2.Get(_T("bar")) != &o + 2)
+ wxPuts(_T("Error in wxHashTable::Get/Put\n"));
+
+ hash2.Put(_T("bar"), &o + 0);
+
+ if (hash2.Get(_T("bar")) != &o + 2)
+ wxPuts(_T("Error (2) 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);
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
#endif // TEST_HASHMAP
+// ----------------------------------------------------------------------------
+// wxHashSet
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_HASHSET
+
+#include "wx/hashset.h"
+
+// test compilation of basic map types
+WX_DECLARE_HASH_SET( int*, wxPointerHash, wxPointerEqual, myPtrHashSet );
+WX_DECLARE_HASH_SET( long, wxIntegerHash, wxIntegerEqual, myLongHashSet );
+WX_DECLARE_HASH_SET( unsigned long, wxIntegerHash, wxIntegerEqual,
+ myUnsignedHashSet );
+WX_DECLARE_HASH_SET( unsigned int, wxIntegerHash, wxIntegerEqual,
+ myTestHashSet1 );
+WX_DECLARE_HASH_SET( int, wxIntegerHash, wxIntegerEqual,
+ myTestHashSet2 );
+WX_DECLARE_HASH_SET( short, wxIntegerHash, wxIntegerEqual,
+ myTestHashSet3 );
+WX_DECLARE_HASH_SET( unsigned short, wxIntegerHash, wxIntegerEqual,
+ myTestHashSet4 );
+WX_DECLARE_HASH_SET( wxString, wxStringHash, wxStringEqual,
+ myTestHashSet5 );
+
+struct MyStruct
+{
+ int* ptr;
+ wxString str;
+};
+
+class MyHash
+{
+public:
+ unsigned long operator()(const MyStruct& s) const
+ { return m_dummy(s.ptr); }
+ MyHash& operator=(const MyHash&) { return *this; }
+private:
+ wxPointerHash m_dummy;
+};
+
+class MyEqual
+{
+public:
+ bool operator()(const MyStruct& s1, const MyStruct& s2) const
+ { return s1.ptr == s2.ptr; }
+ MyEqual& operator=(const MyEqual&) { return *this; }
+};
+
+WX_DECLARE_HASH_SET( MyStruct, MyHash, MyEqual, mySet );
+
+typedef myTestHashSet5 wxStringHashSet;
+
+static void TestHashSet()
+{
+ wxPrintf(_T("*** Testing wxHashSet ***\n"));
+
+ wxStringHashSet set1;
+
+ set1.insert( _T("abc") );
+ set1.insert( _T("bbc") );
+ set1.insert( _T("cbc") );
+ set1.insert( _T("abc") );
+
+ if( set1.size() != 3 )
+ wxPrintf(_T("*** ERROR IN INSERT ***\n"));
+
+ mySet set2;
+ int dummy;
+ MyStruct tmp;
+
+ tmp.ptr = &dummy; tmp.str = _T("ABC");
+ set2.insert( tmp );
+ tmp.ptr = &dummy + 1;
+ set2.insert( tmp );
+ tmp.ptr = &dummy; tmp.str = _T("CDE");
+ set2.insert( tmp );
+
+ if( set2.size() != 2 )
+ wxPrintf(_T("*** ERROR IN INSERT - 2 ***\n"));
+
+ mySet::iterator it = set2.find( tmp );
+
+ if( it == set2.end() )
+ wxPrintf(_T("*** ERROR IN FIND - 1 ***\n"));
+ if( it->ptr != &dummy )
+ wxPrintf(_T("*** ERROR IN FIND - 2 ***\n"));
+ if( it->str != _T("ABC") )
+ wxPrintf(_T("*** ERROR IN INSERT - 3 ***\n"));
+
+ wxPrintf(_T("*** Finished testing wxHashSet ***\n"));
+}
+
+#endif // TEST_HASHSET
+
// ----------------------------------------------------------------------------
// wxList
// ----------------------------------------------------------------------------
#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"));
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());
if ( !ft->GetOpenCommand(&cmd,
wxFileType::MessageParameters(fname, _T(""))) )
cmd = _T("<no command available>");
+ else
+ cmd = wxString(_T('"')) + cmd + _T('"');
- wxPrintf(_T("To open %s (%s) do '%s'.\n"),
+ wxPrintf(_T("To open %s (%s) do %s.\n"),
fname.c_str(), desc.c_str(), cmd.c_str());
delete ft;
#if wxUSE_LONGLONG_NATIVE
wxLongLongNative b(a.GetHi(), a.GetLo());
- wxASSERT_MSG( a == b, "conversions failure" );
+ wxASSERT_MSG( a == b, _T("conversions failure") );
#else
wxPuts(_T("Can't do it without native long long type, test skipped."));
wxLongLongNative aa(a.GetHi(), a.GetLo());
wxLongLongNative bb(b.GetHi(), b.GetLo());
- wxASSERT_MSG( a*b == aa*bb, "multiplication failure" );
+ wxASSERT_MSG( a*b == aa*bb, _T("multiplication failure") );
#else // !wxUSE_LONGLONG_NATIVE
wxPuts(_T("Can't do it without native long long type, test skipped."));
wxLongLongNative m(ll.GetHi(), ll.GetLo());
wxLongLongNative p = m / l, s = m % l;
- wxASSERT_MSG( q == p && r == s, "division failure" );
+ wxASSERT_MSG( q == p && r == s, _T("division failure") );
#else // !wxUSE_LONGLONG_NATIVE
// verify the result
wxASSERT_MSG( ll == q*l + r, "division failure" );
#if wxUSE_LONGLONG_NATIVE
wxASSERT_MSG( c == wxLongLongNative(a.GetHi(), a.GetLo()) +
wxLongLongNative(b.GetHi(), b.GetLo()),
- "addition failure" );
+ _T("addition failure") );
#else // !wxUSE_LONGLONG_NATIVE
wxASSERT_MSG( c - b == a, "addition failure" );
#endif // wxUSE_LONGLONG_NATIVE
#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++ )
{
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
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;
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++ )
#endif // TEST_ODBC
+// ----------------------------------------------------------------------------
+// printf() tests
+// ----------------------------------------------------------------------------
+
+/*
+ NB: this stuff was taken from the glibc test suite and modified to build
+ in wxWindows: if I read the copyright below properly, this shouldn't
+ be a problem
+ */
+
+#ifdef TEST_PRINTF
+
+#ifdef wxTEST_PRINTF
+ // use our functions from wxchar.cpp
+ #undef wxPrintf
+ #undef wxSprintf
+
+ // NB: do _not_ use ATTRIBUTE_PRINTF here, we have some invalid formats
+ // in the tests below
+ int wxPrintf( const wxChar *format, ... );
+ int wxSprintf( wxChar *str, const wxChar *format, ... );
+#endif
+
+#include "wx/longlong.h"
+
+#include <float.h>
+
+static void rfg1 (void);
+static void rfg2 (void);
+
+
+static void
+fmtchk (const wxChar *fmt)
+{
+ (void) wxPrintf(_T("%s:\t`"), fmt);
+ (void) wxPrintf(fmt, 0x12);
+ (void) wxPrintf(_T("'\n"));
+}
+
+static void
+fmtst1chk (const wxChar *fmt)
+{
+ (void) wxPrintf(_T("%s:\t`"), fmt);
+ (void) wxPrintf(fmt, 4, 0x12);
+ (void) wxPrintf(_T("'\n"));
+}
+
+static void
+fmtst2chk (const wxChar *fmt)
+{
+ (void) wxPrintf(_T("%s:\t`"), fmt);
+ (void) wxPrintf(fmt, 4, 4, 0x12);
+ (void) wxPrintf(_T("'\n"));
+}
+
+/* This page is covered by the following copyright: */
+
+/* (C) Copyright C E Chew
+ *
+ * Feel free to copy, use and distribute this software provided:
+ *
+ * 1. you do not pretend that you wrote it
+ * 2. you leave this copyright notice intact.
+ */
+
+/*
+ * Extracted from exercise.c for glibc-1.05 bug report by Bruce Evans.
+ */
+
+#define DEC -123
+#define INT 255
+#define UNS (~0)
+
+/* Formatted Output Test
+ *
+ * This exercises the output formatting code.
+ */
+
+static void
+fp_test (void)
+{
+ int i, j, k, l;
+ wxChar buf[7];
+ wxChar *prefix = buf;
+ wxChar tp[20];
+
+ wxPuts(_T("\nFormatted output test"));
+ wxPrintf(_T("prefix 6d 6o 6x 6X 6u\n"));
+ wxStrcpy(prefix, _T("%"));
+ for (i = 0; i < 2; i++) {
+ for (j = 0; j < 2; j++) {
+ for (k = 0; k < 2; k++) {
+ for (l = 0; l < 2; l++) {
+ wxStrcpy(prefix, _T("%"));
+ if (i == 0) wxStrcat(prefix, _T("-"));
+ if (j == 0) wxStrcat(prefix, _T("+"));
+ if (k == 0) wxStrcat(prefix, _T("#"));
+ if (l == 0) wxStrcat(prefix, _T("0"));
+ wxPrintf(_T("%5s |"), prefix);
+ wxStrcpy(tp, prefix);
+ wxStrcat(tp, _T("6d |"));
+ wxPrintf(tp, DEC);
+ wxStrcpy(tp, prefix);
+ wxStrcat(tp, _T("6o |"));
+ wxPrintf(tp, INT);
+ wxStrcpy(tp, prefix);
+ wxStrcat(tp, _T("6x |"));
+ wxPrintf(tp, INT);
+ wxStrcpy(tp, prefix);
+ wxStrcat(tp, _T("6X |"));
+ wxPrintf(tp, INT);
+ wxStrcpy(tp, prefix);
+ wxStrcat(tp, _T("6u |"));
+ wxPrintf(tp, UNS);
+ wxPrintf(_T("\n"));
+ }
+ }
+ }
+ }
+ wxPrintf(_T("%10s\n"), (wxChar *) NULL);
+ wxPrintf(_T("%-10s\n"), (wxChar *) NULL);
+}
+
+static void TestPrintf()
+{
+ static wxChar shortstr[] = _T("Hi, Z.");
+ static wxChar longstr[] = _T("Good morning, Doctor Chandra. This is Hal. \
+I am ready for my first lesson today.");
+ int result = 0;
+
+ fmtchk(_T("%.4x"));
+ fmtchk(_T("%04x"));
+ fmtchk(_T("%4.4x"));
+ fmtchk(_T("%04.4x"));
+ fmtchk(_T("%4.3x"));
+ fmtchk(_T("%04.3x"));
+
+ fmtst1chk(_T("%.*x"));
+ fmtst1chk(_T("%0*x"));
+ fmtst2chk(_T("%*.*x"));
+ fmtst2chk(_T("%0*.*x"));
+
+ wxPrintf(_T("bad format:\t\"%b\"\n"));
+ wxPrintf(_T("nil pointer (padded):\t\"%10p\"\n"), (void *) NULL);
+
+ wxPrintf(_T("decimal negative:\t\"%d\"\n"), -2345);
+ wxPrintf(_T("octal negative:\t\"%o\"\n"), -2345);
+ wxPrintf(_T("hex negative:\t\"%x\"\n"), -2345);
+ wxPrintf(_T("long decimal number:\t\"%ld\"\n"), -123456L);
+ wxPrintf(_T("long octal negative:\t\"%lo\"\n"), -2345L);
+ wxPrintf(_T("long unsigned decimal number:\t\"%lu\"\n"), -123456L);
+ wxPrintf(_T("zero-padded LDN:\t\"%010ld\"\n"), -123456L);
+ wxPrintf(_T("left-adjusted ZLDN:\t\"%-010ld\"\n"), -123456);
+ wxPrintf(_T("space-padded LDN:\t\"%10ld\"\n"), -123456L);
+ wxPrintf(_T("left-adjusted SLDN:\t\"%-10ld\"\n"), -123456L);
+
+ wxPrintf(_T("zero-padded string:\t\"%010s\"\n"), shortstr);
+ wxPrintf(_T("left-adjusted Z string:\t\"%-010s\"\n"), shortstr);
+ wxPrintf(_T("space-padded string:\t\"%10s\"\n"), shortstr);
+ wxPrintf(_T("left-adjusted S string:\t\"%-10s\"\n"), shortstr);
+ wxPrintf(_T("null string:\t\"%s\"\n"), (wxChar *)NULL);
+ wxPrintf(_T("limited string:\t\"%.22s\"\n"), longstr);
+
+ wxPrintf(_T("e-style >= 1:\t\"%e\"\n"), 12.34);
+ wxPrintf(_T("e-style >= .1:\t\"%e\"\n"), 0.1234);
+ wxPrintf(_T("e-style < .1:\t\"%e\"\n"), 0.001234);
+ wxPrintf(_T("e-style big:\t\"%.60e\"\n"), 1e20);
+ wxPrintf(_T("e-style == .1:\t\"%e\"\n"), 0.1);
+ wxPrintf(_T("f-style >= 1:\t\"%f\"\n"), 12.34);
+ wxPrintf(_T("f-style >= .1:\t\"%f\"\n"), 0.1234);
+ wxPrintf(_T("f-style < .1:\t\"%f\"\n"), 0.001234);
+ wxPrintf(_T("g-style >= 1:\t\"%g\"\n"), 12.34);
+ wxPrintf(_T("g-style >= .1:\t\"%g\"\n"), 0.1234);
+ wxPrintf(_T("g-style < .1:\t\"%g\"\n"), 0.001234);
+ wxPrintf(_T("g-style big:\t\"%.60g\"\n"), 1e20);
+
+ wxPrintf (_T(" %6.5f\n"), .099999999860301614);
+ wxPrintf (_T(" %6.5f\n"), .1);
+ wxPrintf (_T("x%5.4fx\n"), .5);
+
+ wxPrintf (_T("%#03x\n"), 1);
+
+ //wxPrintf (_T("something really insane: %.10000f\n"), 1.0);
+
+ {
+ double d = FLT_MIN;
+ int niter = 17;
+
+ while (niter-- != 0)
+ wxPrintf (_T("%.17e\n"), d / 2);
+ fflush (stdout);
+ }
+
+ wxPrintf (_T("%15.5e\n"), 4.9406564584124654e-324);
+
+#define FORMAT _T("|%12.4f|%12.4e|%12.4g|\n")
+ wxPrintf (FORMAT, 0.0, 0.0, 0.0);
+ wxPrintf (FORMAT, 1.0, 1.0, 1.0);
+ wxPrintf (FORMAT, -1.0, -1.0, -1.0);
+ wxPrintf (FORMAT, 100.0, 100.0, 100.0);
+ wxPrintf (FORMAT, 1000.0, 1000.0, 1000.0);
+ wxPrintf (FORMAT, 10000.0, 10000.0, 10000.0);
+ wxPrintf (FORMAT, 12345.0, 12345.0, 12345.0);
+ wxPrintf (FORMAT, 100000.0, 100000.0, 100000.0);
+ wxPrintf (FORMAT, 123456.0, 123456.0, 123456.0);
+#undef FORMAT
+
+ {
+ wxChar buf[20];
+ int rc = wxSnprintf (buf, WXSIZEOF(buf), _T("%30s"), _T("foo"));
+
+ wxPrintf(_T("snprintf (\"%%30s\", \"foo\") == %d, \"%.*s\"\n"),
+ rc, WXSIZEOF(buf), buf);
+#if 0
+ wxChar buf2[512];
+ wxPrintf ("snprintf (\"%%.999999u\", 10)\n",
+ wxSnprintf(buf2, WXSIZEOFbuf2), "%.999999u", 10));
+#endif
+ }
+
+ fp_test ();
+
+ wxPrintf (_T("%e should be 1.234568e+06\n"), 1234567.8);
+ wxPrintf (_T("%f should be 1234567.800000\n"), 1234567.8);
+ wxPrintf (_T("%g should be 1.23457e+06\n"), 1234567.8);
+ wxPrintf (_T("%g should be 123.456\n"), 123.456);
+ wxPrintf (_T("%g should be 1e+06\n"), 1000000.0);
+ wxPrintf (_T("%g should be 10\n"), 10.0);
+ wxPrintf (_T("%g should be 0.02\n"), 0.02);
+
+ {
+ double x=1.0;
+ wxPrintf(_T("%.17f\n"),(1.0/x/10.0+1.0)*x-x);
+ }
+
+ {
+ wxChar buf[200];
+
+ wxSprintf(buf,_T("%*s%*s%*s"),-1,_T("one"),-20,_T("two"),-30,_T("three"));
+
+ result |= wxStrcmp (buf,
+ _T("onetwo three "));
+
+ wxPuts (result != 0 ? _T("Test failed!") : _T("Test ok."));
+ }
+
+#ifdef wxLongLong_t
+ {
+ wxChar buf[200];
+
+ wxSprintf(buf, _T("%07") wxLongLongFmtSpec _T("o"), wxLL(040000000000));
+ #if 0
+ // for some reason below line fails under Borland
+ wxPrintf (_T("sprintf (buf, \"%%07Lo\", 040000000000ll) = %s"), buf);
+ #endif
+
+ if (wxStrcmp (buf, _T("40000000000")) != 0)
+ {
+ result = 1;
+ wxPuts (_T("\tFAILED"));
+ }
+ wxPuts (_T(""));
+ }
+#endif // wxLongLong_t
+
+ wxPrintf (_T("printf (\"%%hhu\", %u) = %hhu\n"), UCHAR_MAX + 2, UCHAR_MAX + 2);
+ wxPrintf (_T("printf (\"%%hu\", %u) = %hu\n"), USHRT_MAX + 2, USHRT_MAX + 2);
+
+ wxPuts (_T("--- Should be no further output. ---"));
+ rfg1 ();
+ rfg2 ();
+
+#if 0
+ {
+ wxChar bytes[7];
+ wxChar buf[20];
+
+ memset (bytes, '\xff', sizeof bytes);
+ wxSprintf (buf, _T("foo%hhn\n"), &bytes[3]);
+ if (bytes[0] != '\xff' || bytes[1] != '\xff' || bytes[2] != '\xff'
+ || bytes[4] != '\xff' || bytes[5] != '\xff' || bytes[6] != '\xff')
+ {
+ wxPuts (_T("%hhn overwrite more bytes"));
+ result = 1;
+ }
+ if (bytes[3] != 3)
+ {
+ wxPuts (_T("%hhn wrote incorrect value"));
+ result = 1;
+ }
+ }
+#endif
+}
+
+static void
+rfg1 (void)
+{
+ wxChar buf[100];
+
+ wxSprintf (buf, _T("%5.s"), _T("xyz"));
+ if (wxStrcmp (buf, _T(" ")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" "));
+ wxSprintf (buf, _T("%5.f"), 33.3);
+ if (wxStrcmp (buf, _T(" 33")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" 33"));
+ wxSprintf (buf, _T("%8.e"), 33.3e7);
+ if (wxStrcmp (buf, _T(" 3e+08")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" 3e+08"));
+ wxSprintf (buf, _T("%8.E"), 33.3e7);
+ if (wxStrcmp (buf, _T(" 3E+08")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" 3E+08"));
+ wxSprintf (buf, _T("%.g"), 33.3);
+ if (wxStrcmp (buf, _T("3e+01")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T("3e+01"));
+ wxSprintf (buf, _T("%.G"), 33.3);
+ if (wxStrcmp (buf, _T("3E+01")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T("3E+01"));
+}
+
+static void
+rfg2 (void)
+{
+ int prec;
+ wxChar buf[100];
+
+ prec = 0;
+ wxSprintf (buf, _T("%.*g"), prec, 3.3);
+ if (wxStrcmp (buf, _T("3")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T("3"));
+ prec = 0;
+ wxSprintf (buf, _T("%.*G"), prec, 3.3);
+ if (wxStrcmp (buf, _T("3")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T("3"));
+ prec = 0;
+ wxSprintf (buf, _T("%7.*G"), prec, 3.33);
+ if (wxStrcmp (buf, _T(" 3")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" 3"));
+ prec = 3;
+ wxSprintf (buf, _T("%04.*o"), prec, 33);
+ if (wxStrcmp (buf, _T(" 041")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" 041"));
+ prec = 7;
+ wxSprintf (buf, _T("%09.*u"), prec, 33);
+ if (wxStrcmp (buf, _T(" 0000033")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" 0000033"));
+ prec = 3;
+ wxSprintf (buf, _T("%04.*x"), prec, 33);
+ if (wxStrcmp (buf, _T(" 021")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" 021"));
+ prec = 3;
+ wxSprintf (buf, _T("%04.*X"), prec, 33);
+ if (wxStrcmp (buf, _T(" 021")) != 0)
+ wxPrintf (_T("got: '%s', expected: '%s'\n"), buf, _T(" 021"));
+}
+
+#endif // TEST_PRINTF
+
// ----------------------------------------------------------------------------
// registry and related stuff
// ----------------------------------------------------------------------------
wxRegKey key;
- key.SetName("HKEY_CLASSES_ROOT\\.ddf" );
+ key.SetName(_T("HKEY_CLASSES_ROOT\\.ddf") );
key.Create();
- key = "ddxf_auto_file" ;
- key.SetName("HKEY_CLASSES_ROOT\\.flo" );
+ key = _T("ddxf_auto_file") ;
+ key.SetName(_T("HKEY_CLASSES_ROOT\\.flo") );
key.Create();
- key = "ddxf_auto_file" ;
- key.SetName("HKEY_CLASSES_ROOT\\ddxf_auto_file\\DefaultIcon");
+ key = _T("ddxf_auto_file") ;
+ key.SetName(_T("HKEY_CLASSES_ROOT\\ddxf_auto_file\\DefaultIcon"));
key.Create();
- key = "program,0" ;
- key.SetName("HKEY_CLASSES_ROOT\\ddxf_auto_file\\shell\\open\\command");
+ key = _T("program,0") ;
+ key.SetName(_T("HKEY_CLASSES_ROOT\\ddxf_auto_file\\shell\\open\\command"));
key.Create();
- key = "program \"%1\"" ;
+ key = _T("program \"%1\"") ;
- key.SetName("HKEY_CLASSES_ROOT\\.ddf" );
+ key.SetName(_T("HKEY_CLASSES_ROOT\\.ddf") );
key.DeleteSelf();
- key.SetName("HKEY_CLASSES_ROOT\\.flo" );
+ key.SetName(_T("HKEY_CLASSES_ROOT\\.flo") );
key.DeleteSelf();
- key.SetName("HKEY_CLASSES_ROOT\\ddxf_auto_file\\DefaultIcon");
+ key.SetName(_T("HKEY_CLASSES_ROOT\\ddxf_auto_file\\DefaultIcon"));
key.DeleteSelf();
- key.SetName("HKEY_CLASSES_ROOT\\ddxf_auto_file\\shell\\open\\command");
+ key.SetName(_T("HKEY_CLASSES_ROOT\\ddxf_auto_file\\shell\\open\\command"));
key.DeleteSelf();
}
#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
// ----------------------------------------------------------------------------
return;
}
- for ( ;; )
+ bool quit = false;
+ while ( !quit )
{
wxPrintf(_T("Server: waiting for connection on port %d...\n"), PORT);
server->SetTimeout(60); // 1 min
- while ( socket->IsConnected() )
+ bool close = false;
+ while ( !close && socket->IsConnected() )
{
wxString s;
wxChar ch = _T('\0');
}
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();
}
{
wxPrintf(_T("ERROR: failed to connect to %s\n"), hostname);
- return FALSE;
+ return false;
}
else
{
hostname, ftp.Pwd().c_str());
}
- return TRUE;
+ return true;
}
// test (fixed?) wxFTP bug with wu-ftpd >= 2.6.0?
}
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];
}
else
{
- size_t size = in->StreamSize();
+ size_t size = in->GetSize();
wxPrintf(_T("Reading file %s (%u bytes)..."), filename, size);
fflush(stdout);
{
wxPuts(_T("*** Testing miscellaneous wxFTP functions ***"));
- if ( ftp.SendCommand("STAT") != '2' )
+ if ( ftp.SendCommand(_T("STAT")) != '2' )
{
wxPuts(_T("ERROR: STAT failed"));
}
wxPrintf(_T("STAT returned:\n\n%s\n"), ftp.GetLastResult().c_str());
}
- if ( ftp.SendCommand("HELP SITE") != '2' )
+ if ( ftp.SendCommand(_T("HELP SITE")) != '2' )
{
wxPuts(_T("ERROR: HELP SITE failed"));
}
// special handling of LIST and NLST as they require data connection
wxString start(buf, 4);
start.MakeUpper();
- if ( start == "LIST" || start == "NLST" )
+ if ( start == _T("LIST") || start == _T("NLST") )
{
wxString wildcard;
if ( wxStrlen(buf) > 4 )
wildcard = buf + 5;
wxArrayString files;
- if ( !ftp.GetList(files, wildcard, start == "LIST") )
+ if ( !ftp.GetList(files, wildcard, start == _T("LIST")) )
{
wxPrintf(_T("ERROR: failed to get %s of files\n"), start.c_str());
}
}
// send a command to check the remote file
- if ( ftp.SendCommand(wxString("STAT ") + file1) != '2' )
+ if ( ftp.SendCommand(wxString(_T("STAT ")) + file1) != '2' )
{
wxPrintf(_T("ERROR: STAT %s failed\n"), file1);
}
wxString s = wxString::FromAscii(msg);
wxPrintf(_T("Message in Unicode: %s\n"), s.c_str());
- wxPrintf(_T("Message in ASCII: %s\n"), s.ToAscii());
+ printf("Message in ASCII: %s\n", (const char *)s.ToAscii());
wxPutchar(_T('\n'));
}
#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,
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()
{
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(""));
// 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."));
}
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(""));
#include <math.h>
-#include "wx/date.h"
#include "wx/datetime.h"
// the test data
// 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++ )
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);
}
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());
}
}
}
}
else
{
- bool equal = FALSE; // suppress compilaer warning
+ bool equal = false; // suppress compilaer warning
switch ( kind )
{
case CompareBoth:
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++ )
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
{
m_n = n;
m_ch = ch;
- m_cancelled = FALSE;
+ m_cancelled = false;
Create();
}
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()
{
if ( TestDestroy() )
{
- m_cancelled = TRUE;
+ m_cancelled = true;
break;
}
}
}
+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)
{
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"));
{
ArrayBars bars;
- Bar bar("second bar (two copies!)");
+ Bar bar(_T("second bar (two copies!)"));
wxPrintf(_T("Initially: %u objects in the array, %u objects total.\n"),
bars.GetCount(), Bar::GetNumber());
- bars.Add(new Bar("first bar"));
+ bars.Add(new Bar(_T("first bar")));
bars.Add(bar,2);
wxPrintf(_T("Now: %u objects in the array, %u objects total.\n"),
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());
static void TestStringSub()
{
- wxString s("Hello, world!");
+ wxString s(_T("Hello, world!"));
wxPuts(_T("*** Testing wxString substring extraction ***"));
{
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());
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);
+ }
+}
+
+#if 0
+void is(int line, const wxChar* got, const wxChar* expected,
+ const wxString& msg = wxEmptyString)
+{
+ bool isOk = wxStrcmp( got, expected ) == 0;
+ ok(line, isOk, msg);
+ if( !isOk )
+ {
+ wxPuts(_T("Got: ") + wxString(got));
+ wxPuts(_T("Expected: ") + wxString(expected));
+ }
+}
+#endif
+
+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(_T("Got: ") + got);
+ wxPuts(_T("Expected: ") + expected);
+ }
+}
+
+void is(int line, size_t got, size_t expected,
+ const wxString& msg = wxEmptyString)
+{
+ bool isOk = got == expected;
+ ok(line, isOk, msg);
+ if( !isOk )
+ {
+ wxPuts(wxString::Format(_T("Got: %ld"), got));
+ wxPuts(wxString::Format(_T("Expected: %ld"), expected));
+ }
+}
+
+#define is_m( got, expected, message ) is( __LINE__, (got), (expected), (message) )
+#define is_nom( got, expected ) is( __LINE__, (got), (expected), wxEmptyString )
+
+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() );
+
+ // find
+ // 0 1 2
+ // 01234567890123456789012345
+ s1 = _T("abcdefgABCDEFGabcABCabcABC");
+ s2 = _T("gAB");
+
+ is_nom( s1.find(_T('A')), 7u );
+ is_nom( s1.find(_T('A'), 7), 7u );
+ is_nom( s1.find(_T('Z')), wxString::npos );
+ is_nom( s1.find(_T('C'), 22), 25u );
+
+ is_nom( s1.find(_T("gAB")), 6u );
+ is_nom( s1.find(_T("gAB"), 7), wxString::npos );
+ is_nom( s1.find(_T("gAB"), 6), 6u );
+
+ is_nom( s1.find(_T("gABZZZ"), 2, 3), 6u );
+ is_nom( s1.find(_T("gABZZZ"), 7, 3), wxString::npos );
+
+ is_nom( s1.find(s2), 6u );
+ is_nom( s1.find(s2, 7), wxString::npos );
+ is_nom( s1.find(s2, 6), 6u );
+
+ // find_first_not_of
+ // 0 1 2 3
+ // 01234567890123456789012345678901234
+ s1 = _T("aaaaaabcdefghlkjiaaaaaabcdbcdbcdbcd");
+ s2 = _T("aaaaaa");
+
+ is_nom( s1.find_first_not_of(_T('a')), 6u );
+ is_nom( s1.find_first_not_of(_T('a'), 7), 7u );
+ is_nom( s2.find_first_not_of(_T('a')), wxString::npos );
+
+ is_nom( s1.find_first_not_of(_T("abde"), 4), 7u );
+ is_nom( s1.find_first_not_of(_T("abde"), 7), 7u );
+ is_nom( s1.find_first_not_of(_T("abcdefghijkl")), wxString::npos );
+
+ is_nom( s1.find_first_not_of(_T("abcdefghi"), 0, 4), 9u );
+
+ // find_first_of
+ is_nom( s1.find_first_of(_T('c')), 7u );
+ is_nom( s1.find_first_of(_T('v')), wxString::npos );
+ is_nom( s1.find_first_of(_T('c'), 10), 24u );
+
+ is_nom( s1.find_first_of(_T("ijkl")), 13u );
+ is_nom( s1.find_first_of(_T("ddcfg"), 17), 24u );
+ is_nom( s1.find_first_of(_T("ddcfga"), 17, 5), 24u );
+
+ // find_last_not_of
+ // 0 1 2 3
+ // 01234567890123456789012345678901234
+ s1 = _T("aaaaaabcdefghlkjiaaaaaabcdbcdbcdbcd");
+ s2 = _T("aaaaaa");
+
+ is_nom( s2.find_last_not_of(_T('a')), wxString::npos );
+ is_nom( s1.find_last_not_of(_T('d')), 33u );
+ is_nom( s1.find_last_not_of(_T('d'), 25), 24u );
+
+ is_nom( s1.find_last_not_of(_T("bcd")), 22u );
+ is_nom( s1.find_last_not_of(_T("abc"), 24), 16u );
+
+ is_nom( s1.find_last_not_of(_T("abcdefghijklmnopqrstuv"), 24, 3), 16u );
+
+ // find_last_of
+ is_nom( s2.find_last_of(_T('c')), wxString::npos );
+ is_nom( s1.find_last_of(_T('a')), 22u );
+ is_nom( s1.find_last_of(_T('b'), 24), 23u );
+
+ is_nom( s1.find_last_of(_T("ijklm")), 16u );
+ is_nom( s1.find_last_of(_T("ijklma"), 33, 4), 16u );
+ is_nom( s1.find_last_of(_T("a"), 17), 17u );
+
+ // 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") );
+
+ // rfind
+ // 0 1 2
+ // 01234567890123456789012345
+ s1 = _T("abcdefgABCDEFGabcABCabcABC");
+ s2 = _T("gAB");
+ s3 = _T("ab");
+
+ is_nom( s1.rfind(_T('A')), 23u );
+ is_nom( s1.rfind(_T('A'), 7), 7u );
+ is_nom( s1.rfind(_T('Z')), wxString::npos );
+ is_nom( s1.rfind(_T('C'), 22), 19u );
+
+ is_nom( s1.rfind(_T("cAB")), 22u );
+ is_nom( s1.rfind(_T("cAB"), 15), wxString::npos );
+ is_nom( s1.rfind(_T("cAB"), 21), 16u );
+
+ is_nom( s1.rfind(_T("gABZZZ"), 7, 3), 6u );
+ is_nom( s1.rfind(_T("gABZZZ"), 5, 3), wxString::npos );
+
+ is_nom( s1.rfind(s2), 6u );
+ is_nom( s1.rfind(s2, 5), wxString::npos );
+ is_nom( s1.rfind(s2, 6), 6u );
+ is_nom( s1.rfind(s3, 1), 0u );
+
+ // resize
+ s1 = s2 = s3 = s4 = _T("abcABCdefDEF");
+
+ s1.resize( 12 );
+ s2.resize( 10 );
+ s3.resize( 14, _T(' ') );
+ s4.resize( 14, _T('W') );
+
+ is_nom( s1, _T("abcABCdefDEF") );
+ is_nom( s2, _T("abcABCdefD") );
+ is_nom( s3, _T("abcABCdefDEF ") );
+ is_nom( s4, _T("abcABCdefDEFWW") );
+
+ // substr
+ s1 = _T("abcdefgABCDEFG");
+
+ is_nom( s1.substr( 0, 14 ), s1 );
+ is_nom( s1.substr( 1, 13 ), _T("bcdefgABCDEFG") );
+ is_nom( s1.substr( 1, 20 ), _T("bcdefgABCDEFG") );
+ is_nom( s1.substr( 14, 30 ), _T("") );
+
+ wxPuts(_T("*** Testing std::string operations finished ***\n"));
+}
+
#endif // TEST_STRINGS
// ----------------------------------------------------------------------------
int main(int argc, char **argv)
{
- wxApp::CheckBuildOptions(wxBuildOptions());
+ wxApp::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE, "program");
wxInitializer initializer;
if ( !initializer )
wxChar **wargv = new wxChar *[argc + 1];
{
- for ( int n = 0; n < argc; n++ )
+ int n;
+
+ for (n = 0; n < argc; n++ )
{
wxMB2WXbuf warg = wxConvertMB2WX(argv[n]);
wargv[n] = wxStrdup(warg);
{
TestStringMatch();
}
+
+ TestStdString();
#endif // TEST_STRINGS
#ifdef TEST_ARRAYS
- if ( TEST_ALL )
+ if ( 1 || TEST_ALL )
{
wxArrayString a1;
a1.Add(_T("tiger"));
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(false);
PrintArray(_T("a1"), a1);
wxPuts(_T("*** After sorting a1 in reverse order"));
- a1.Sort(TRUE);
+ a1.Sort(true);
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
#ifdef TEST_LIST
TestListCtor();
+ TestList();
#endif // TEST_LIST
#ifdef TEST_LOCALE
#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());
{
TestFileNameConstruction();
TestFileNameMakeRelative();
+ TestFileNameMakeAbsolute();
TestFileNameSplit();
TestFileNameTemp();
TestFileNameCwd();
TestLongLongConversion();
TestBitOperations();
TestLongLongComparison();
- TestLongLongPrint();
+ TestLongLongToString();
+ TestLongLongPrintf();
}
#endif // TEST_LONGLONG
TestHashMap();
#endif // TEST_HASHMAP
+#ifdef TEST_HASHSET
+ TestHashSet();
+#endif // TEST_HASHSET
+
#ifdef TEST_MIME
wxLog::AddTraceMask(_T("mime"));
if ( TEST_ALL )
TestDbOpen();
#endif // TEST_ODBC
+#ifdef TEST_PRINTF
+ TestPrintf();
+#endif // TEST_PRINTF
+
#ifdef TEST_REGCONF
TestRegConfWrite();
#endif // TEST_REGCONF
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);
if ( nCPUs != -1 )
wxThread::SetConcurrency(nCPUs);
+ TestDetachedThreads();
if ( TEST_ALL )
{
- TestDetachedThreads();
TestJoinableThreads();
TestThreadSuspend();
TestThreadDelete();
TestThreadConditions();
TestThreadExec();
+ TestSemaphore();
}
-
- TestSemaphore();
#endif // TEST_THREADS
#ifdef TEST_TIMER
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);