// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
+// IMPORTANT NOTE FOR WXWIDGETS USERS:
+// If you're a wxWidgets user and you're looking at this file to learn how to
+// structure a wxWidgets console application, then you don't have much to learn.
+// This application is used more for testing rather than as sample but
+// basically the following simple block is enough for you to start your
+// own console application:
+
+/*
+ int main(int argc, char **argv)
+ {
+ wxApp::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE, "program");
+
+ wxInitializer initializer;
+ if ( !initializer )
+ {
+ fprintf(stderr, "Failed to initialize the wxWidgets library, aborting.");
+ return -1;
+ }
+
+ static const wxCmdLineEntryDesc cmdLineDesc[] =
+ {
+ { wxCMD_LINE_SWITCH, "h", "help", "show this help message",
+ wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
+ // ... your other command line options here...
+
+ { wxCMD_LINE_NONE }
+ };
+
+ wxCmdLineParser parser(cmdLineDesc, argc, wxArgv);
+ switch ( parser.Parse() )
+ {
+ case -1:
+ wxLogMessage(_T("Help was given, terminating."));
+ break;
+
+ case 0:
+ // everything is ok; proceed
+ break;
+
+ default:
+ wxLogMessage(_T("Syntax error detected, aborting."));
+ break;
+ }
+
+ // do something useful here
+
+ return 0;
+ }
+*/
+
+
// ============================================================================
// declarations
// ============================================================================
#include "wx/string.h"
#include "wx/file.h"
+#include "wx/filename.h"
#include "wx/app.h"
#include "wx/log.h"
+#include "wx/apptrait.h"
+#include "wx/platinfo.h"
+#include "wx/wxchar.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)? Define TEST_ALL to 0 to do a single
// test, define it to 1 to do all tests.
-#define TEST_ALL 0
+#define TEST_ALL 1
#if TEST_ALL
#define TEST_DIR
#define TEST_DYNLIB
#define TEST_ENVIRON
- #define TEST_EXECUTE
#define TEST_FILE
#define TEST_FILECONF
#define TEST_FILENAME
#define TEST_FILETIME
- // #define TEST_FTP --FIXME! (RN)
+ #define TEST_FTP
#define TEST_INFO_FUNCTIONS
#define TEST_LOCALE
#define TEST_LOG
#define TEST_MIME
+ #define TEST_MODULE
#define TEST_PATHLIST
- #define TEST_ODBC
#define TEST_PRINTF
#define TEST_REGCONF
#define TEST_REGEX
#define TEST_TEXTSTREAM
#define TEST_THREADS
#define TEST_TIMER
- // #define TEST_VCARD -- don't enable this (VZ)
// #define TEST_VOLUME --FIXME! (RN)
#define TEST_WCHAR
#define TEST_ZIP
#else // #if TEST_ALL
- #define TEST_DIR
+ #define TEST_FTP
#endif
// some tests are interactive, define this to run them
static void ShowCmdLine(const wxCmdLineParser& parser)
{
- wxString s = _T("Input files: ");
+ wxString s = _T("Command line parsed successfully:\nInput files: ");
size_t count = parser.GetParamCount();
for ( size_t param = 0; param < count; param++ )
wxString strVal;
long lVal;
+ double dVal;
wxDateTime dt;
if ( parser.Found(_T("o"), &strVal) )
s << _T("Output file:\t") << strVal << '\n';
s << _T("Input dir:\t") << strVal << '\n';
if ( parser.Found(_T("s"), &lVal) )
s << _T("Size:\t") << lVal << '\n';
+ if ( parser.Found(_T("f"), &dVal) )
+ s << _T("Double:\t") << dVal << '\n';
if ( parser.Found(_T("d"), &dt) )
s << _T("Date:\t") << dt.FormatISODate() << '\n';
if ( parser.Found(_T("project_name"), &strVal) )
virtual wxDirTraverseResult OnDir(const wxString& dirname)
{
wxString path, name, ext;
- wxSplitPath(dirname, &path, &name, &ext);
+ wxFileName::SplitPath(dirname, &path, &name, &ext);
if ( !ext.empty() )
name << _T('.') << ext;
for ( size_t n = 0; n < count; ++n )
{
const wxDynamicLibraryDetails& details = dlls[n];
- printf("%-45s", details.GetPath().mb_str());
+ printf("%-45s", (const char *)details.GetPath().mb_str());
void *addr;
size_t len;
(unsigned long)addr, (unsigned long)((char *)addr + len));
}
- printf(" %s\n", details.GetVersion().mb_str());
+ printf(" %s\n", (const char *)details.GetVersion().mb_str());
}
}
#endif // TEST_ENVIRON
-// ----------------------------------------------------------------------------
-// wxExecute
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_EXECUTE
-
-#include "wx/utils.h"
-
-static void TestExecute()
-{
- wxPuts(_T("*** testing wxExecute ***"));
-
-#ifdef __UNIX__
- #define COMMAND "cat -n ../../Makefile" // "echo hi"
- #define SHELL_COMMAND "echo hi from shell"
- #define REDIRECT_COMMAND COMMAND // "date"
-#elif defined(__WXMSW__)
- #define COMMAND "command.com /c echo hi"
- #define SHELL_COMMAND "echo hi"
- #define REDIRECT_COMMAND COMMAND
-#else
- #error "no command to exec"
-#endif // OS
-
- wxPrintf(_T("Testing wxShell: "));
- fflush(stdout);
- if ( wxShell(_T(SHELL_COMMAND)) )
- wxPuts(_T("Ok."));
- else
- wxPuts(_T("ERROR."));
-
- wxPrintf(_T("Testing wxExecute: "));
- fflush(stdout);
- if ( wxExecute(_T(COMMAND), true /* sync */) == 0 )
- wxPuts(_T("Ok."));
- else
- wxPuts(_T("ERROR."));
-
-#if 0 // no, it doesn't work (yet?)
- wxPrintf(_T("Testing async wxExecute: "));
- fflush(stdout);
- if ( wxExecute(COMMAND) != 0 )
- wxPuts(_T("Ok (command launched)."));
- else
- wxPuts(_T("ERROR."));
-#endif // 0
-
- wxPrintf(_T("Testing wxExecute with redirection:\n"));
- wxArrayString output;
- if ( wxExecute(_T(REDIRECT_COMMAND), output) != 0 )
- {
- wxPuts(_T("ERROR."));
- }
- else
- {
- size_t count = output.GetCount();
- for ( size_t n = 0; n < count; n++ )
- {
- wxPrintf(_T("\t%s\n"), output[n].c_str());
- }
-
- wxPuts(_T("Ok."));
- }
-}
-
-#endif // TEST_EXECUTE
-
// ----------------------------------------------------------------------------
// file
// ----------------------------------------------------------------------------
wxPuts(wxEmptyString);
}
+static void TestTempFile()
+{
+ wxPuts(_T("*** wxTempFile test ***"));
+
+ wxTempFile tmpFile;
+ if ( tmpFile.Open(_T("test2")) && tmpFile.Write(_T("the answer is 42")) )
+ {
+ if ( tmpFile.Commit() )
+ wxPuts(_T("File committed."));
+ else
+ wxPuts(_T("ERROR: could't commit temp file."));
+
+ wxRemoveFile(_T("test2"));
+ }
+
+ wxPuts(wxEmptyString);
+}
+
#endif // TEST_FILE
// ----------------------------------------------------------------------------
#ifdef TEST_FILETIME
-#include <wx/filename.h>
-#include <wx/datetime.h>
+#include "wx/filename.h"
+#include "wx/datetime.h"
static void TestFileGetTimes()
{
#include "wx/intl.h"
#include "wx/utils.h" // for wxSetEnv
-static wxLocale gs_localeDefault(wxLANGUAGE_ENGLISH);
+static wxLocale gs_localeDefault;
+ // NOTE: don't init it here as it needs a wxAppTraits object
+ // and thus must be init-ed after creation of the wxInitializer
+ // class in the main()
// find the name of the language from its value
static const wxChar *GetLangName(int lang)
{
wxPuts(_T("*** Testing wxLocale::GetSystemLanguage ***"));
+ gs_localeDefault.Init(wxLANGUAGE_ENGLISH);
+
static const wxChar *langStrings[] =
{
NULL, // system default
wxPuts(wxEmptyString);
}
-static void TestMimeOverride()
-{
- wxPuts(_T("*** Testing wxMimeTypesManager additional files loading ***\n"));
-
- static const wxChar *mailcap = _T("/tmp/mailcap");
- static const wxChar *mimetypes = _T("/tmp/mime.types");
-
- if ( wxFile::Exists(mailcap) )
- wxPrintf(_T("Loading mailcap from '%s': %s\n"),
- mailcap,
- wxTheMimeTypesManager->ReadMailcap(mailcap) ? _T("ok") : _T("ERROR"));
- else
- wxPrintf(_T("WARN: mailcap file '%s' doesn't exist, not loaded.\n"),
- mailcap);
-
- if ( wxFile::Exists(mimetypes) )
- wxPrintf(_T("Loading mime.types from '%s': %s\n"),
- mimetypes,
- wxTheMimeTypesManager->ReadMimeTypes(mimetypes) ? _T("ok") : _T("ERROR"));
- else
- wxPrintf(_T("WARN: mime.types file '%s' doesn't exist, not loaded.\n"),
- mimetypes);
-
- wxPuts(wxEmptyString);
-}
-
static void TestMimeFilename()
{
wxPuts(_T("*** Testing MIME type from filename query ***\n"));
wxPuts(wxEmptyString);
}
+// these tests were broken by wxMimeTypesManager changes, temporarily disabling
+#if 0
+
+static void TestMimeOverride()
+{
+ wxPuts(_T("*** Testing wxMimeTypesManager additional files loading ***\n"));
+
+ static const wxChar *mailcap = _T("/tmp/mailcap");
+ static const wxChar *mimetypes = _T("/tmp/mime.types");
+
+ if ( wxFile::Exists(mailcap) )
+ wxPrintf(_T("Loading mailcap from '%s': %s\n"),
+ mailcap,
+ wxTheMimeTypesManager->ReadMailcap(mailcap) ? _T("ok") : _T("ERROR"));
+ else
+ wxPrintf(_T("WARN: mailcap file '%s' doesn't exist, not loaded.\n"),
+ mailcap);
+
+ if ( wxFile::Exists(mimetypes) )
+ wxPrintf(_T("Loading mime.types from '%s': %s\n"),
+ mimetypes,
+ wxTheMimeTypesManager->ReadMimeTypes(mimetypes) ? _T("ok") : _T("ERROR"));
+ else
+ wxPrintf(_T("WARN: mime.types file '%s' doesn't exist, not loaded.\n"),
+ mimetypes);
+
+ wxPuts(wxEmptyString);
+}
+
static void TestMimeAssociate()
{
wxPuts(_T("*** Testing creation of filetype association ***\n"));
_T(""), // print cmd
_T("XYZ File"), // description
_T(".xyz"), // extensions
- NULL // end of extensions
+ wxNullPtr // end of extensions
);
ftInfo.SetShortDesc(_T("XYZFile")); // used under Win32 only
wxPuts(wxEmptyString);
}
+#endif // 0
+
#endif // TEST_MIME
+// ----------------------------------------------------------------------------
+// module dependencies feature
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_MODULE
+
+#include "wx/module.h"
+
+class wxTestModule : public wxModule
+{
+protected:
+ virtual bool OnInit() { wxPrintf(_T("Load module: %s\n"), GetClassInfo()->GetClassName()); return true; }
+ virtual void OnExit() { wxPrintf(_T("Unload module: %s\n"), GetClassInfo()->GetClassName()); }
+};
+
+class wxTestModuleA : public wxTestModule
+{
+public:
+ wxTestModuleA();
+private:
+ DECLARE_DYNAMIC_CLASS(wxTestModuleA)
+};
+
+class wxTestModuleB : public wxTestModule
+{
+public:
+ wxTestModuleB();
+private:
+ DECLARE_DYNAMIC_CLASS(wxTestModuleB)
+};
+
+class wxTestModuleC : public wxTestModule
+{
+public:
+ wxTestModuleC();
+private:
+ DECLARE_DYNAMIC_CLASS(wxTestModuleC)
+};
+
+class wxTestModuleD : public wxTestModule
+{
+public:
+ wxTestModuleD();
+private:
+ DECLARE_DYNAMIC_CLASS(wxTestModuleD)
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxTestModuleC, wxModule)
+wxTestModuleC::wxTestModuleC()
+{
+ AddDependency(CLASSINFO(wxTestModuleD));
+}
+
+IMPLEMENT_DYNAMIC_CLASS(wxTestModuleA, wxModule)
+wxTestModuleA::wxTestModuleA()
+{
+ AddDependency(CLASSINFO(wxTestModuleB));
+ AddDependency(CLASSINFO(wxTestModuleD));
+}
+
+IMPLEMENT_DYNAMIC_CLASS(wxTestModuleD, wxModule)
+wxTestModuleD::wxTestModuleD()
+{
+}
+
+IMPLEMENT_DYNAMIC_CLASS(wxTestModuleB, wxModule)
+wxTestModuleB::wxTestModuleB()
+{
+ AddDependency(CLASSINFO(wxTestModuleD));
+ AddDependency(CLASSINFO(wxTestModuleC));
+}
+
+#endif // TEST_MODULE
+
// ----------------------------------------------------------------------------
// misc information functions
// ----------------------------------------------------------------------------
#include "wx/utils.h"
+#if TEST_INTERACTIVE
static void TestDiskInfo()
{
wxPuts(_T("*** Testing wxGetDiskSpace() ***"));
}
}
}
+#endif // TEST_INTERACTIVE
static void TestOsInfo()
{
wxPrintf(_T("Running under: %s, version %d.%d\n"),
wxGetOsDescription().c_str(), major, minor);
- wxPrintf(_T("%ld free bytes of memory left.\n"), wxGetFreeMemory());
+ wxPrintf(_T("%ld free bytes of memory left.\n"), wxGetFreeMemory().ToLong());
wxPrintf(_T("Host name is %s (%s).\n"),
wxGetHostName().c_str(), wxGetFullHostName().c_str());
wxPuts(wxEmptyString);
}
+static void TestPlatformInfo()
+{
+ wxPuts(_T("*** Testing wxPlatformInfo functions ***\n"));
+
+ // get this platform
+ wxPlatformInfo plat;
+
+ wxPrintf(_T("Operating system family name is: %s\n"), plat.GetOperatingSystemFamilyName().c_str());
+ wxPrintf(_T("Operating system name is: %s\n"), plat.GetOperatingSystemIdName().c_str());
+ wxPrintf(_T("Port ID name is: %s\n"), plat.GetPortIdName().c_str());
+ wxPrintf(_T("Port ID short name is: %s\n"), plat.GetPortIdShortName().c_str());
+ wxPrintf(_T("Architecture is: %s\n"), plat.GetArchName().c_str());
+ wxPrintf(_T("Endianness is: %s\n"), plat.GetEndiannessName().c_str());
+
+ wxPuts(wxEmptyString);
+}
+
static void TestUserInfo()
{
wxPuts(_T("*** Testing user info functions ***\n"));
// regular expressions
// ----------------------------------------------------------------------------
-#ifdef TEST_REGEX
+#if defined TEST_REGEX && TEST_INTERACTIVE
#include "wx/regex.h"
#endif // TEST_REGEX
-// ----------------------------------------------------------------------------
-// database
-// ----------------------------------------------------------------------------
-
-#if !wxUSE_ODBC
- #undef TEST_ODBC
-#endif
-
-#ifdef TEST_ODBC
-
-#include <wx/db.h>
-
-static void TestDbOpen()
-{
- HENV henv;
- wxDb db(henv);
-}
-
-#endif // TEST_ODBC
-
// ----------------------------------------------------------------------------
// printf() tests
// ----------------------------------------------------------------------------
#undef wxPrintf
#undef wxSprintf
- // NB: do _not_ use ATTRIBUTE_PRINTF here, we have some invalid formats
+ // NB: do _not_ use WX_ATTRIBUTE_PRINTF here, we have some invalid formats
// in the tests below
int wxPrintf( const wxChar *format, ... );
int wxSprintf( wxChar *str, const wxChar *format, ... );
static void TestRegConfRead()
{
- wxConfig *config = new wxConfig(_T("myapp"));
+ wxRegConfig *config = new wxRegConfig(_T("myapp"));
wxString str;
long dummy;
wxON_BLOCK_EXIT2(function2, 3.14, 'p');
Object obj;
- wxON_BLOCK_EXIT_OBJ0(obj, &Object::method0);
- wxON_BLOCK_EXIT_OBJ1(obj, &Object::method1, 7);
- wxON_BLOCK_EXIT_OBJ2(obj, &Object::method2, 2.71, 'e');
+ wxON_BLOCK_EXIT_OBJ0(obj, Object::method0);
+ wxON_BLOCK_EXIT_OBJ1(obj, Object::method1, 7);
+ wxON_BLOCK_EXIT_OBJ2(obj, Object::method2, 2.71, 'e');
wxScopeGuard dismissed = wxMakeGuard(function0);
dismissed.Dismiss();
#ifdef TEST_FTP
#include "wx/protocol/ftp.h"
-
-static wxFTP ftp;
+#include "wx/protocol/log.h"
#define FTP_ANONYMOUS
+static wxFTP *ftp;
+
#ifdef FTP_ANONYMOUS
static const wxChar *directory = _T("/pub");
static const wxChar *filename = _T("welcome.msg");
wxChar user[256];
wxFgets(user, WXSIZEOF(user), stdin);
user[wxStrlen(user) - 1] = '\0'; // chop off '\n'
- ftp.SetUser(user);
+ ftp->SetUser(user);
wxChar password[256];
wxPrintf(_T("Password for %s: "), password);
wxFgets(password, WXSIZEOF(password), stdin);
password[wxStrlen(password) - 1] = '\0'; // chop off '\n'
- ftp.SetPassword(password);
+ ftp->SetPassword(password);
wxPrintf(_T("--- Attempting to connect to %s:21 as %s...\n"), hostname, user);
#endif // FTP_ANONYMOUS/!FTP_ANONYMOUS
- if ( !ftp.Connect(hostname) )
+ if ( !ftp->Connect(hostname) )
{
wxPrintf(_T("ERROR: failed to connect to %s\n"), hostname);
else
{
wxPrintf(_T("--- Connected to %s, current directory is '%s'\n"),
- hostname, ftp.Pwd().c_str());
- ftp.Close();
+ hostname, ftp->Pwd().c_str());
+ ftp->Close();
}
return true;
}
-// test (fixed?) wxFTP bug with wu-ftpd >= 2.6.0?
-static void TestFtpWuFtpd()
-{
- wxFTP ftp;
- static const wxChar *hostname = _T("ftp.eudora.com");
- if ( !ftp.Connect(hostname) )
- {
- wxPrintf(_T("ERROR: failed to connect to %s\n"), hostname);
- }
- else
- {
- static const wxChar *filename = _T("eudora/pubs/draft-gellens-submit-09.txt");
- wxInputStream *in = ftp.GetInputStream(filename);
- if ( !in )
- {
- wxPrintf(_T("ERROR: couldn't get input stream for %s\n"), filename);
- }
- else
- {
- size_t size = in->GetSize();
- wxPrintf(_T("Reading file %s (%u bytes)..."), filename, size);
-
- wxChar *data = new wxChar[size];
- if ( !in->Read(data, size) )
- {
- wxPuts(_T("ERROR: read error"));
- }
- else
- {
- wxPrintf(_T("Successfully retrieved the file.\n"));
- }
-
- delete [] data;
- delete in;
- }
- }
-}
-
static void TestFtpList()
{
wxPuts(_T("*** Testing wxFTP file listing ***\n"));
// test CWD
- if ( !ftp.ChDir(directory) )
+ if ( !ftp->ChDir(directory) )
{
wxPrintf(_T("ERROR: failed to cd to %s\n"), directory);
}
- wxPrintf(_T("Current directory is '%s'\n"), ftp.Pwd().c_str());
+ wxPrintf(_T("Current directory is '%s'\n"), ftp->Pwd().c_str());
// test NLIST and LIST
wxArrayString files;
- if ( !ftp.GetFilesList(files) )
+ if ( !ftp->GetFilesList(files) )
{
wxPuts(_T("ERROR: failed to get NLIST of files"));
}
else
{
- wxPrintf(_T("Brief list of files under '%s':\n"), ftp.Pwd().c_str());
+ wxPrintf(_T("Brief list of files under '%s':\n"), ftp->Pwd().c_str());
size_t count = files.GetCount();
for ( size_t n = 0; n < count; n++ )
{
wxPuts(_T("End of the file list"));
}
- if ( !ftp.GetDirList(files) )
+ if ( !ftp->GetDirList(files) )
{
wxPuts(_T("ERROR: failed to get LIST of files"));
}
else
{
- wxPrintf(_T("Detailed list of files under '%s':\n"), ftp.Pwd().c_str());
+ wxPrintf(_T("Detailed list of files under '%s':\n"), ftp->Pwd().c_str());
size_t count = files.GetCount();
for ( size_t n = 0; n < count; n++ )
{
wxPuts(_T("End of the file list"));
}
- if ( !ftp.ChDir(_T("..")) )
+ if ( !ftp->ChDir(_T("..")) )
{
wxPuts(_T("ERROR: failed to cd to .."));
}
- wxPrintf(_T("Current directory is '%s'\n"), ftp.Pwd().c_str());
+ wxPrintf(_T("Current directory is '%s'\n"), ftp->Pwd().c_str());
}
static void TestFtpDownload()
wxPuts(_T("*** Testing wxFTP download ***\n"));
// test RETR
- wxInputStream *in = ftp.GetInputStream(filename);
+ wxInputStream *in = ftp->GetInputStream(filename);
if ( !in )
{
wxPrintf(_T("ERROR: couldn't get input stream for %s\n"), filename);
{
wxPuts(_T("*** Testing FTP SIZE command ***"));
- if ( !ftp.ChDir(directory) )
+ if ( !ftp->ChDir(directory) )
{
wxPrintf(_T("ERROR: failed to cd to %s\n"), directory);
}
- wxPrintf(_T("Current directory is '%s'\n"), ftp.Pwd().c_str());
+ wxPrintf(_T("Current directory is '%s'\n"), ftp->Pwd().c_str());
- if ( ftp.FileExists(filename) )
+ if ( ftp->FileExists(filename) )
{
- int size = ftp.GetFileSize(filename);
+ int size = ftp->GetFileSize(filename);
if ( size == -1 )
wxPrintf(_T("ERROR: couldn't get size of '%s'\n"), filename);
else
{
wxPuts(_T("*** Testing miscellaneous wxFTP functions ***"));
- if ( ftp.SendCommand(_T("STAT")) != '2' )
+ if ( ftp->SendCommand(_T("STAT")) != '2' )
{
wxPuts(_T("ERROR: STAT failed"));
}
else
{
- wxPrintf(_T("STAT returned:\n\n%s\n"), ftp.GetLastResult().c_str());
+ wxPrintf(_T("STAT returned:\n\n%s\n"), ftp->GetLastResult().c_str());
}
- if ( ftp.SendCommand(_T("HELP SITE")) != '2' )
+ if ( ftp->SendCommand(_T("HELP SITE")) != '2' )
{
wxPuts(_T("ERROR: HELP SITE failed"));
}
else
{
wxPrintf(_T("The list of site-specific commands:\n\n%s\n"),
- ftp.GetLastResult().c_str());
+ ftp->GetLastResult().c_str());
}
}
+#if TEST_INTERACTIVE
+
static void TestFtpInteractive()
{
wxPuts(_T("\n*** Interactive wxFTP test ***"));
wildcard = buf + 5;
wxArrayString files;
- if ( !ftp.GetList(files, wildcard, start == _T("LIST")) )
+ if ( !ftp->GetList(files, wildcard, start == _T("LIST")) )
{
wxPrintf(_T("ERROR: failed to get %s of files\n"), start.c_str());
}
else
{
wxPrintf(_T("--- %s of '%s' under '%s':\n"),
- start.c_str(), wildcard.c_str(), ftp.Pwd().c_str());
+ start.c_str(), wildcard.c_str(), ftp->Pwd().c_str());
size_t count = files.GetCount();
for ( size_t n = 0; n < count; n++ )
{
}
else // !list
{
- wxChar ch = ftp.SendCommand(buf);
+ wxChar ch = ftp->SendCommand(buf);
wxPrintf(_T("Command %s"), ch ? _T("succeeded") : _T("failed"));
if ( ch )
{
wxPrintf(_T(" (return code %c)"), ch);
}
- wxPrintf(_T(", server reply:\n%s\n\n"), ftp.GetLastResult().c_str());
+ wxPrintf(_T(", server reply:\n%s\n\n"), ftp->GetLastResult().c_str());
}
}
wxPuts(_T("\n*** done ***"));
}
+#endif // TEST_INTERACTIVE
+
static void TestFtpUpload()
{
wxPuts(_T("*** Testing wxFTP uploading ***\n"));
// upload a file
static const wxChar *file1 = _T("test1");
static const wxChar *file2 = _T("test2");
- wxOutputStream *out = ftp.GetOutputStream(file1);
+ wxOutputStream *out = ftp->GetOutputStream(file1);
if ( out )
{
wxPrintf(_T("--- Uploading to %s ---\n"), file1);
}
// send a command to check the remote file
- if ( ftp.SendCommand(wxString(_T("STAT ")) + file1) != '2' )
+ if ( ftp->SendCommand(wxString(_T("STAT ")) + file1) != '2' )
{
wxPrintf(_T("ERROR: STAT %s failed\n"), file1);
}
else
{
wxPrintf(_T("STAT %s returned:\n\n%s\n"),
- file1, ftp.GetLastResult().c_str());
+ file1, ftp->GetLastResult().c_str());
}
- out = ftp.GetOutputStream(file2);
+ out = ftp->GetOutputStream(file2);
if ( out )
{
wxPrintf(_T("--- Uploading to %s ---\n"), file1);
{
}
- virtual void Walk(size_t skip = 1)
+ virtual void Walk(size_t skip = 1, size_t maxdepth = wxSTACKWALKER_MAX_DEPTH)
{
wxPuts(_T("Stack dump:"));
- wxStackWalker::Walk(skip);
+ wxStackWalker::Walk(skip, maxdepth);
}
protected:
virtual void OnStackFrame(const wxStackFrame& frame)
{
- printf("[%2d] ", frame.GetLevel());
+ printf("[%2d] ", (int) frame.GetLevel());
wxString name = frame.GetName();
if ( !name.empty() )
{
- printf("%-20.40s", name.mb_str());
+ printf("%-20.40s", (const char*)name.mb_str());
}
else
{
if ( frame.HasSourceLocation() )
{
printf("\t%s:%d",
- frame.GetFileName().mb_str(),
- frame.GetLine());
+ (const char*)frame.GetFileName().mb_str(),
+ (int)frame.GetLine());
}
puts("");
wxString type, val;
for ( size_t n = 0; frame.GetParam(n, &type, &name, &val); n++ )
{
- printf("\t%s %s = %s\n", type.mb_str(), name.mb_str(), val.mb_str());
+ printf("\t%s %s = %s\n", (const char*)type.mb_str(),
+ (const char*)name.mb_str(),
+ (const char*)val.mb_str());
}
}
};
#ifdef TEST_STDPATHS
#include "wx/stdpaths.h"
+#include "wx/wxchar.h" // wxPrintf
static void TestStandardPaths()
{
wxPrintf(_T("Data dir (sys local):\t%s\n"), stdp.GetLocalDataDir().c_str());
wxPrintf(_T("Data dir (user):\t%s\n"), stdp.GetUserDataDir().c_str());
wxPrintf(_T("Data dir (user local):\t%s\n"), stdp.GetUserLocalDataDir().c_str());
+ wxPrintf(_T("Documents dir:\t\t%s\n"), stdp.GetDocumentsDir().c_str());
+ wxPrintf(_T("Executable path:\t%s\n"), stdp.GetExecutablePath().c_str());
wxPrintf(_T("Plugins dir:\t\t%s\n"), stdp.GetPluginsDir().c_str());
+ wxPrintf(_T("Resources dir:\t\t%s\n"), stdp.GetResourcesDir().c_str());
+ wxPrintf(_T("Localized res. dir:\t%s\n"),
+ stdp.GetLocalizedResourcesDir(_T("fr")).c_str());
+ wxPrintf(_T("Message catalogs dir:\t%s\n"),
+ stdp.GetLocalizedResourcesDir
+ (
+ _T("fr"),
+ wxStandardPaths::ResourceCat_Messages
+ ).c_str());
}
#endif // TEST_STDPATHS
fsOut.Write("foo", 3);
}
- wxFileInputStream fsIn(filename);
- wxPrintf(_T("File stream size: %u\n"), fsIn.GetSize());
- while ( !fsIn.Eof() )
{
- wxPutchar(fsIn.GetC());
+ wxFileInputStream fsIn(filename);
+ wxPrintf(_T("File stream size: %u\n"), fsIn.GetSize());
+ int c;
+ while ( (c=fsIn.GetC()) != wxEOF )
+ {
+ wxPutchar(c);
+ }
}
if ( !wxRemoveFile(filename) )
wxMemoryInputStream memInpStream(buf, len);
wxPrintf(_T("Memory stream size: %u\n"), memInpStream.GetSize());
- while ( !memInpStream.Eof() )
+ int c;
+ while ( (c=memInpStream.GetC()) != wxEOF )
{
- wxPutchar(memInpStream.GetC());
+ wxPutchar(c);
}
wxPuts(_T("\n*** wxMemoryInputStream test done ***"));
wxPuts(_T(", ok."));
}
-#endif // TEST_TIMER
-
-// ----------------------------------------------------------------------------
-// vCard support
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_VCARD
-
-#include "wx/vcard.h"
-
-static void DumpVObject(size_t level, const wxVCardObject& vcard)
-{
- void *cookie;
- wxVCardObject *vcObj = vcard.GetFirstProp(&cookie);
- while ( vcObj )
- {
- wxPrintf(_T("%s%s"),
- wxString(_T('\t'), level).c_str(),
- vcObj->GetName().c_str());
-
- wxString value;
- switch ( vcObj->GetType() )
- {
- case wxVCardObject::String:
- case wxVCardObject::UString:
- {
- wxString val;
- vcObj->GetValue(&val);
- value << _T('"') << val << _T('"');
- }
- break;
-
- case wxVCardObject::Int:
- {
- unsigned int i;
- vcObj->GetValue(&i);
- value.Printf(_T("%u"), i);
- }
- break;
-
- case wxVCardObject::Long:
- {
- unsigned long l;
- vcObj->GetValue(&l);
- value.Printf(_T("%lu"), l);
- }
- break;
+#include "wx/timer.h"
+#include "wx/evtloop.h"
- case wxVCardObject::None:
- break;
-
- case wxVCardObject::Object:
- value = _T("<node>");
- break;
-
- default:
- value = _T("<unknown value type>");
- }
-
- if ( !!value )
- wxPrintf(_T(" = %s"), value.c_str());
- wxPutchar('\n');
-
- DumpVObject(level + 1, *vcObj);
-
- delete vcObj;
- vcObj = vcard.GetNextProp(&cookie);
- }
-}
-
-static void DumpVCardAddresses(const wxVCard& vcard)
+void TestTimer()
{
- wxPuts(_T("\nShowing all addresses from vCard:\n"));
+ wxPuts(_T("*** Testing wxTimer ***\n"));
- size_t nAdr = 0;
- void *cookie;
- wxVCardAddress *addr = vcard.GetFirstAddress(&cookie);
- while ( addr )
+ class MyTimer : public wxTimer
{
- wxString flagsStr;
- int flags = addr->GetFlags();
- if ( flags & wxVCardAddress::Domestic )
- {
- flagsStr << _T("domestic ");
- }
- if ( flags & wxVCardAddress::Intl )
- {
- flagsStr << _T("international ");
- }
- if ( flags & wxVCardAddress::Postal )
- {
- flagsStr << _T("postal ");
- }
- if ( flags & wxVCardAddress::Parcel )
- {
- flagsStr << _T("parcel ");
- }
- if ( flags & wxVCardAddress::Home )
- {
- flagsStr << _T("home ");
- }
- if ( flags & wxVCardAddress::Work )
- {
- flagsStr << _T("work ");
- }
-
- wxPrintf(_T("Address %u:\n")
- "\tflags = %s\n"
- "\tvalue = %s;%s;%s;%s;%s;%s;%s\n",
- ++nAdr,
- flagsStr.c_str(),
- addr->GetPostOffice().c_str(),
- addr->GetExtAddress().c_str(),
- addr->GetStreet().c_str(),
- addr->GetLocality().c_str(),
- addr->GetRegion().c_str(),
- addr->GetPostalCode().c_str(),
- addr->GetCountry().c_str()
- );
-
- delete addr;
- addr = vcard.GetNextAddress(&cookie);
- }
-}
-
-static void DumpVCardPhoneNumbers(const wxVCard& vcard)
-{
- wxPuts(_T("\nShowing all phone numbers from vCard:\n"));
-
- size_t nPhone = 0;
- void *cookie;
- wxVCardPhoneNumber *phone = vcard.GetFirstPhoneNumber(&cookie);
- while ( phone )
- {
- wxString flagsStr;
- int flags = phone->GetFlags();
- if ( flags & wxVCardPhoneNumber::Voice )
- {
- flagsStr << _T("voice ");
- }
- if ( flags & wxVCardPhoneNumber::Fax )
- {
- flagsStr << _T("fax ");
- }
- if ( flags & wxVCardPhoneNumber::Cellular )
- {
- flagsStr << _T("cellular ");
- }
- if ( flags & wxVCardPhoneNumber::Modem )
- {
- flagsStr << _T("modem ");
- }
- if ( flags & wxVCardPhoneNumber::Home )
- {
- flagsStr << _T("home ");
- }
- if ( flags & wxVCardPhoneNumber::Work )
- {
- flagsStr << _T("work ");
- }
+ public:
+ MyTimer() : wxTimer() { m_num = 0; }
- wxPrintf(_T("Phone number %u:\n")
- "\tflags = %s\n"
- "\tvalue = %s\n",
- ++nPhone,
- flagsStr.c_str(),
- phone->GetNumber().c_str()
- );
-
- delete phone;
- phone = vcard.GetNextPhoneNumber(&cookie);
- }
-}
-
-static void TestVCardRead()
-{
- wxPuts(_T("*** Testing wxVCard reading ***\n"));
-
- wxVCard vcard(_T("vcard.vcf"));
- if ( !vcard.IsOk() )
- {
- wxPuts(_T("ERROR: couldn't load vCard."));
- }
- else
- {
- // read individual vCard properties
- wxVCardObject *vcObj = vcard.GetProperty("FN");
- wxString value;
- if ( vcObj )
- {
- vcObj->GetValue(&value);
- delete vcObj;
- }
- else
+ virtual void Notify()
{
- value = _T("<none>");
- }
+ wxPrintf(_T("%d"), m_num++);
+ fflush(stdout);
- wxPrintf(_T("Full name retrieved directly: %s\n"), value.c_str());
+ if ( m_num == 10 )
+ {
+ wxPrintf(_T("... exiting the event loop"));
+ Stop();
+ wxEventLoop::GetActive()->Exit(0);
+ wxPuts(_T(", ok."));
+ }
- if ( !vcard.GetFullName(&value) )
- {
- value = _T("<none>");
+ fflush(stdout);
}
- wxPrintf(_T("Full name from wxVCard API: %s\n"), value.c_str());
+ private:
+ int m_num;
+ };
- // now show how to deal with multiply occurring properties
- DumpVCardAddresses(vcard);
- DumpVCardPhoneNumbers(vcard);
+ wxEventLoop loop;
- // and finally show all
- wxPuts(_T("\nNow dumping the entire vCard:\n")
- "-----------------------------\n");
+ wxTimer timer1;
+ timer1.Start(100, true /* one shot */);
+ timer1.Stop();
+ timer1.Start(100, true /* one shot */);
- DumpVObject(0, vcard);
- }
-}
-
-static void TestVCardWrite()
-{
- wxPuts(_T("*** Testing wxVCard writing ***\n"));
+ MyTimer timer;
+ timer.Start(500);
- wxVCard vcard;
- if ( !vcard.IsOk() )
- {
- wxPuts(_T("ERROR: couldn't create vCard."));
- }
- else
- {
- // set some fields
- vcard.SetName("Zeitlin", "Vadim");
- vcard.SetFullName("Vadim Zeitlin");
- vcard.SetOrganization("wxWidgets", "R&D");
-
- // just dump the vCard back
- wxPuts(_T("Entire vCard follows:\n"));
- wxPuts(vcard.Write());
- }
+ loop.Run();
}
-#endif // TEST_VCARD
+#endif // TEST_TIMER
// ----------------------------------------------------------------------------
// wxVolume tests
wxPuts(_T("*** Testing ZIP reading ***\n"));
static const wxString filename = _T("foo");
- wxZipInputStream istr(TESTFILE_ZIP, filename);
+ wxFFileInputStream in(TESTFILE_ZIP);
+ wxZipInputStream istr(in);
+ wxZipEntry entry(filename);
+ istr.OpenEntry(entry);
+
wxPrintf(_T("Archive size: %u\n"), istr.GetSize());
wxPrintf(_T("Dumping the file '%s':\n"), filename.c_str());
- while ( !istr.Eof() )
+ int c;
+ while ( (c=istr.GetC()) != wxEOF )
{
- wxPutchar(istr.GetC());
+ wxPutchar(c);
fflush(stdout);
}
wxThread::Sleep(500);
}
-#include "wx/utils.h"
-
-class MyExecThread : public wxThread
-{
-public:
- MyExecThread(const wxString& command) : wxThread(wxTHREAD_JOINABLE),
- m_command(command)
- {
- Create();
- }
-
- virtual ExitCode Entry()
- {
- return (ExitCode)wxExecute(m_command, wxEXEC_SYNC);
- }
-
-private:
- wxString m_command;
-};
-
-static void TestThreadExec()
-{
- wxPuts(_T("*** Testing wxExecute interaction with threads ***\n"));
-
- MyExecThread thread(_T("true"));
- thread.Run();
-
- wxPrintf(_T("Main program exit code: %ld.\n"),
- wxExecute(_T("false"), wxEXEC_SYNC));
-
- wxPrintf(_T("Thread exit code: %ld.\n"), (long)thread.Wait());
-}
-
// semaphore tests
#include "wx/datetime.h"
#if wxUSE_CMDLINE_PARSER
static const wxCmdLineEntryDesc cmdLineDesc[] =
{
- { wxCMD_LINE_SWITCH, _T("h"), _T("help"), _T("show this help message"),
+ { wxCMD_LINE_SWITCH, "h", "help", "show this help message",
wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
- { wxCMD_LINE_SWITCH, _T("v"), _T("verbose"), _T("be verbose") },
- { wxCMD_LINE_SWITCH, _T("q"), _T("quiet"), _T("be quiet") },
+ { wxCMD_LINE_SWITCH, "v", "verbose", "be verbose" },
+ { wxCMD_LINE_SWITCH, "q", "quiet", "be quiet" },
- { wxCMD_LINE_OPTION, _T("o"), _T("output"), _T("output file") },
- { wxCMD_LINE_OPTION, _T("i"), _T("input"), _T("input dir") },
- { wxCMD_LINE_OPTION, _T("s"), _T("size"), _T("output block size"),
+ { wxCMD_LINE_OPTION, "o", "output", "output file" },
+ { wxCMD_LINE_OPTION, "i", "input", "input dir" },
+ { wxCMD_LINE_OPTION, "s", "size", "output block size",
wxCMD_LINE_VAL_NUMBER },
- { wxCMD_LINE_OPTION, _T("d"), _T("date"), _T("output file date"),
+ { wxCMD_LINE_OPTION, "d", "date", "output file date",
wxCMD_LINE_VAL_DATE },
+ { wxCMD_LINE_OPTION, "f", "double", "output double",
+ wxCMD_LINE_VAL_DOUBLE },
- { wxCMD_LINE_PARAM, NULL, NULL, _T("input file"),
+ { wxCMD_LINE_PARAM, NULL, NULL, "input file",
wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE },
{ wxCMD_LINE_NONE }
TestEnvironment();
#endif // TEST_ENVIRON
-#ifdef TEST_EXECUTE
- TestExecute();
-#endif // TEST_EXECUTE
-
#ifdef TEST_FILECONF
TestFileConfRead();
#endif // TEST_FILECONF
TestFileRead();
TestTextFileRead();
TestFileCopy();
+ TestTempFile();
#endif // TEST_FILE
#ifdef TEST_FILENAME
#ifdef TEST_FTP
wxLog::AddTraceMask(FTP_TRACE_MASK);
+
+ // wxFTP cannot be a static variable as its ctor needs to access
+ // wxWidgets internals after it has been initialized
+ ftp = new wxFTP;
+ ftp->SetLog(new wxProtocolLog(FTP_TRACE_MASK));
+
if ( TestFtpConnect() )
{
#if TEST_ALL
#endif // TEST_ALL
#if TEST_INTERACTIVE
- TestFtpInteractive();
+ //TestFtpInteractive();
#endif
}
//else: connecting to the FTP server failed
- #if 0
- TestFtpWuFtpd();
- #endif
+ delete ftp;
#endif // TEST_FTP
#ifdef TEST_MIME
- wxLog::AddTraceMask(_T("mime"));
- #if TEST_ALL
- TestMimeEnum();
- TestMimeOverride();
- TestMimeAssociate();
- #endif
+ //wxLog::AddTraceMask(_T("mime"));
+ TestMimeEnum();
+#if 0
+ TestMimeOverride();
+ TestMimeAssociate();
+#endif
TestMimeFilename();
#endif // TEST_MIME
#ifdef TEST_INFO_FUNCTIONS
- #if TEST_ALL
- TestOsInfo();
- TestUserInfo();
+ TestOsInfo();
+ TestPlatformInfo();
+ TestUserInfo();
- #if TEST_INTERACTIVE
- TestDiskInfo();
- #endif
+ #if TEST_INTERACTIVE
+ TestDiskInfo();
#endif
#endif // TEST_INFO_FUNCTIONS
TestPathList();
#endif // TEST_PATHLIST
-#ifdef TEST_ODBC
- TestDbOpen();
-#endif // TEST_ODBC
-
#ifdef TEST_PRINTF
TestPrintf();
#endif // TEST_PRINTF
TestThreadSuspend();
TestThreadDelete();
TestThreadConditions();
- TestThreadExec();
TestSemaphore();
#endif
#endif // TEST_THREADS
#ifdef TEST_TIMER
TestStopWatch();
+ TestTimer();
#endif // TEST_TIMER
#ifdef TEST_DATETIME
wxUsleep(3000);
#endif // TEST_USLEEP
-#ifdef TEST_VCARD
- TestVCardRead();
- TestVCardWrite();
-#endif // TEST_VCARD
-
#ifdef TEST_VOLUME
TestFSVolume();
#endif // TEST_VOLUME