//#define TEST_ARRAYS
//#define TEST_CMDLINE
//#define TEST_DIR
+//#define TEST_EXECUTE
//#define TEST_LOG
//#define TEST_LONGLONG
//#define TEST_MIME
-//#define TEST_STRINGS
+#define TEST_STRINGS
//#define TEST_THREADS
-#define TEST_TIME
+//#define TEST_TIME
// ============================================================================
// implementation
#endif // TEST_DIR
+// ----------------------------------------------------------------------------
+// wxExecute
+// ----------------------------------------------------------------------------
+
+#ifdef TEST_EXECUTE
+
+#include <wx/utils.h>
+
+static void TestExecute()
+{
+ puts("*** testing wxExecute ***");
+
+#ifdef __UNIX__
+ #define COMMAND "echo hi"
+#elif defined(__WXMSW__)
+ #define COMMAND "command.com -c 'echo hi'"
+#else
+ #error "no command to exec"
+#endif // OS
+
+ if ( wxExecute(COMMAND) == 0 )
+ puts("\nOk.");
+ else
+ puts("\nError.");
+}
+
+#endif // TEST_EXECUTE
+
// ----------------------------------------------------------------------------
// MIME types
// ----------------------------------------------------------------------------
// get a random 64 bit number
#define RAND_LL() MAKE_LL(rand(), rand(), rand(), rand())
-#if wxUSE_LONGLONG_NATIVE
+#if wxUSE_LONGLONG_WX
inline bool operator==(const wxLongLongWx& a, const wxLongLongNative& b)
{ return a.GetHi() == b.GetHi() && a.GetLo() == b.GetLo(); }
inline bool operator==(const wxLongLongNative& a, const wxLongLongWx& b)
{ return a.GetHi() == b.GetHi() && a.GetLo() == b.GetLo(); }
-#endif // wxUSE_LONGLONG_NATIVE
+#endif // wxUSE_LONGLONG_WX
static void TestSpeed()
{
#ifdef TEST_STRINGS
#include "wx/timer.h"
+#include "wx/tokenzr.h"
static void TestString()
{
puts("");
}
+// returns "not found" for npos, value for all others
+static wxString PosToString(size_t res)
+{
+ wxString s = res == wxString::npos ? wxString(_T("not found"))
+ : wxString::Format(_T("%u"), res);
+ return s;
+}
+
+static void TestStringFind()
+{
+ puts("*** Testing wxString find() functions ***");
+
+ static const wxChar *strToFind = _T("ell");
+ static const struct StringFindTest
+ {
+ const wxChar *str;
+ size_t start,
+ result; // of searching "ell" in str
+ } findTestData[] =
+ {
+ { _T("Well, hello world"), 0, 1 },
+ { _T("Well, hello world"), 6, 7 },
+ { _T("Well, hello world"), 9, wxString::npos },
+ };
+
+ for ( size_t n = 0; n < WXSIZEOF(findTestData); n++ )
+ {
+ const StringFindTest& ft = findTestData[n];
+ size_t res = wxString(ft.str).find(strToFind, ft.start);
+
+ printf(_T("Index of '%s' in '%s' starting from %u is %s "),
+ strToFind, ft.str, ft.start, PosToString(res).c_str());
+
+ size_t resTrue = ft.result;
+ if ( res == resTrue )
+ {
+ puts(_T("(ok)"));
+ }
+ else
+ {
+ printf(_T("(ERROR: should be %s)\n"),
+ PosToString(resTrue).c_str());
+ }
+ }
+
+ puts("");
+}
+
+// replace TABs with \t and CRs with \n
+static wxString MakePrintable(const wxChar *s)
+{
+ wxString str(s);
+ (void)str.Replace(_T("\t"), _T("\\t"));
+ (void)str.Replace(_T("\n"), _T("\\n"));
+ (void)str.Replace(_T("\r"), _T("\\r"));
+
+ return str;
+}
+
+static void TestStringTokenizer()
+{
+ puts("*** Testing wxStringTokenizer ***");
+
+ static const struct StringTokenizerTest
+ {
+ const wxChar *str; // string to tokenize
+ const wxChar *delims; // delimiters to use
+ size_t count; // count of token
+ bool with; // return tokens with delimiters?
+ } tokenizerTestData[] =
+ {
+ { _T(""), _T(" "), 0, FALSE },
+ { _T("Hello, world"), _T(" "), 2, FALSE },
+ { _T("Hello, world"), _T(","), 2, FALSE },
+ { _T("Hello, world!"), _T(",!"), 3, TRUE },
+ { _T("username:password:uid:gid:gecos:home:shell"), _T(":"), 7, FALSE },
+ { _T("1 \t3\t4 6 "), wxDEFAULT_DELIMITERS, 9, TRUE },
+ { _T("01/02/99"), _T("/-"), 3, FALSE },
+ };
+
+ for ( size_t n = 0; n < WXSIZEOF(tokenizerTestData); n++ )
+ {
+ const StringTokenizerTest& tt = tokenizerTestData[n];
+ wxStringTokenizer tkz(tt.str, tt.delims, tt.with);
+
+ size_t count = tkz.CountTokens();
+ printf(_T("String '%s' has %u tokens delimited by '%s' "),
+ tt.str,
+ count,
+ MakePrintable(tt.delims).c_str());
+ if ( count == tt.count )
+ {
+ puts(_T("(ok)"));
+ }
+ else
+ {
+ printf(_T("(ERROR: should be %u)\n"), tt.count);
+
+ continue;
+ }
+
+ // now show the tokens themselves
+ size_t count2 = 0;
+ while ( tkz.HasMoreTokens() )
+ {
+ printf(_T("\ttoken %u: '%s'\n"),
+ ++count2,
+ MakePrintable(tkz.GetNextToken()).c_str());
+ }
+
+ if ( count2 != count )
+ {
+ puts(_T("ERROR: token count mismatch"));
+ }
+ }
+
+ puts("");
+}
+
#endif // TEST_STRINGS
// ----------------------------------------------------------------------------
if ( 0 )
{
TestStringSub();
+ TestStringFormat();
+ TestStringFind();
}
- TestStringFormat();
+ TestStringTokenizer();
#endif // TEST_STRINGS
#ifdef TEST_ARRAYS
TestDirEnum();
#endif // TEST_DIR
+#ifdef TEST_EXECUTE
+ TestExecute();
+#endif // TEST_EXECUTE
+
#ifdef TEST_LOG
wxString s;
for ( size_t n = 0; n < 8000; n++ )