#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_MIME
#define TEST_PATHLIST
#define TEST_ODBC
+ #define TEST_PRINTF
#define TEST_REGCONF
#define TEST_REGEX
#define TEST_REGISTRY
#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_EXECUTE
+ #define TEST_SOCKETS
- 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:\\");
return;
}
- wxDir dir(_T("s:/tmp/foo"));
+ wxDir dir(cwd);
if ( !dir.IsOpened() )
{
wxPrintf(_T("ERROR: failed to open current directory '%s'.\n"), cwd.c_str());
TestDirEnumHelper(dir, wxDIR_DEFAULT | wxDIR_DOTDOT);
wxPuts(_T("Enumerating object files in current directory:"));
- TestDirEnumHelper(dir, wxDIR_DEFAULT, "*.o");
+ TestDirEnumHelper(dir, wxDIR_DEFAULT, "*.o*");
wxPuts(_T("Enumerating directories in current directory:"));
TestDirEnumHelper(dir, wxDIR_DIRS);
}
// 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 wxExecute: "));
fflush(stdout);
- if ( wxExecute(COMMAND, TRUE /* sync */) == 0 )
+ if ( wxExecute(COMMAND, true /* sync */) == 0 )
wxPuts(_T("Ok."));
else
wxPuts(_T("ERROR."));
} 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()
}
}
+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!
{
wxHashFoos hash;
- hash.DeleteContents(TRUE);
+ hash.DeleteContents(true);
wxPrintf(_T("Hash created: %u foos in hash, %u foos totally\n"),
hash.GetCount(), Foo::count);
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);
+ list1.DeleteContents(true);
}
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;
#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
#ifdef TEST_PATHLIST
+#ifdef __UNIX__
+ #define CMD_IN_PATH _T("ls")
+#else
+ #define CMD_IN_PATH _T("command.com")
+#endif
+
static void TestPathList()
{
wxPuts(_T("*** Testing wxPathList ***\n"));
wxPathList pathlist;
- pathlist.AddEnvList("PATH");
- wxString path = pathlist.FindValidPath("ls");
+ pathlist.AddEnvList(_T("PATH"));
+ wxString path = pathlist.FindValidPath(CMD_IN_PATH);
if ( path.empty() )
{
wxPrintf(_T("ERROR: command not found in the path.\n"));
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));
+ wxPrintf (_T("sprintf (buf, \"%%07Lo\", 040000000000ll) = %s"), buf);
+
+ 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
// ----------------------------------------------------------------------------
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);
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(""));
// 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());
}
}
}
{ CompareBoth, _T("Date is %x, time is %X") },
{ CompareTime, _T("Time is %H:%M:%S or %I:%M:%S %p") },
{ CompareNone, _T("The day of year: %j, the week of year: %W") },
- { CompareDate, _T("ISO date without separators: %4Y%2m%2d") },
+ { CompareDate, _T("ISO date without separators: %Y%m%d") },
};
static const Date formatTestDates[] =
}
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++ )
#endif // TEST_DATETIME
+// ----------------------------------------------------------------------------
+// wxTextInput/OutputStream
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_TEXTSTREAM
+
+#include "wx/txtstrm.h"
+#include "wx/wfstream.h"
+
+static void TestTextInputStream()
+{
+ wxPuts(_T("\n*** wxTextInputStream test ***"));
+
+ wxFileInputStream fsIn(_T("testdata.fc"));
+ if ( !fsIn.Ok() )
+ {
+ wxPuts(_T("ERROR: couldn't open file."));
+ }
+ else
+ {
+ wxTextInputStream tis(fsIn);
+
+ size_t line = 1;
+ for ( ;; )
+ {
+ const wxString s = tis.ReadLine();
+
+ // 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;
}
{
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());
PrintArray(_T("a1"), a1);
wxPuts(_T("*** After sorting a1 in reverse order"));
- a1.Sort(TRUE);
+ a1.Sort(true);
PrintArray(_T("a1"), a1);
wxPuts(_T("*** After sorting a1 by the string length"));
if ( TEST_ALL )
{
TestDirExists();
- TestDirTraverse();
+ TestDirEnum();
}
- TestDirEnum();
+ TestDirTraverse();
#endif // TEST_DIR
#ifdef TEST_DLLLOADER
#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
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();
}
+ TestTimeWNumber();
+
if ( TEST_INTERACTIVE )
TestDateTimeInteractive();
#endif // TEST_DATETIME