X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0de868d9dda005db4f84117f0704dbc5702ddb71..2e9a6788171a422dd2ec3daa5dedc775892e8fd7:/samples/console/console.cpp diff --git a/samples/console/console.cpp b/samples/console/console.cpp index e01cf964bf..d073cb5511 100644 --- a/samples/console/console.cpp +++ b/samples/console/console.cpp @@ -32,12 +32,13 @@ //#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 @@ -160,6 +161,34 @@ static void TestDirEnum() #endif // TEST_DIR +// ---------------------------------------------------------------------------- +// wxExecute +// ---------------------------------------------------------------------------- + +#ifdef TEST_EXECUTE + +#include + +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 // ---------------------------------------------------------------------------- @@ -225,12 +254,12 @@ static void TestMimeEnum() // 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() { @@ -396,7 +425,7 @@ static void TestAddition() #if wxUSE_LONGLONG_NATIVE wxASSERT_MSG( c == wxLongLongNative(a.GetHi(), a.GetLo()) + wxLongLongNative(b.GetHi(), b.GetLo()), - "addition failure" ); + "addition failure" ); #else // !wxUSE_LONGLONG_NATIVE wxASSERT_MSG( c - b == a, "addition failure" ); #endif // wxUSE_LONGLONG_NATIVE @@ -892,7 +921,7 @@ def GetMonthWeek(dt): if weekNumMonth < 0: weekNumMonth = weekNumMonth + 53 return weekNumMonth - + def GetLastSundayBefore(dt): if dt.iso_week[2] == 7: return dt @@ -1293,7 +1322,7 @@ static void TestTimeArithmetics() { wxDateSpan span; const char *name; - } testArithmData[] = + } testArithmData[] = { { wxDateSpan::Day(), "day" }, { wxDateSpan::Week(), "week" }, @@ -1301,7 +1330,7 @@ static void TestTimeArithmetics() { wxDateSpan::Year(), "year" }, { wxDateSpan(1, 2, 3, 4), "year, 2 months, 3 weeks, 4 days" }, }; - + wxDateTime dt(29, wxDateTime::Dec, 1999), dt1, dt2; for ( size_t n = 0; n < WXSIZEOF(testArithmData); n++ ) @@ -1670,6 +1699,38 @@ void PrintArray(const char* name, const wxArrayString& array) #ifdef TEST_STRINGS #include "wx/timer.h" +#include "wx/tokenzr.h" + +static void TestStringConstruction() +{ + puts("*** Testing wxString constructores ***"); + + #define TEST_CTOR(args, res) \ + { \ + wxString s args ; \ + printf("wxString%s = %s ", #args, s.c_str()); \ + if ( s == res ) \ + { \ + puts("(ok)"); \ + } \ + else \ + { \ + printf("(ERROR: should be %s)\n", res); \ + } \ + } + + TEST_CTOR((_T('Z'), 4), _T("ZZZZ")); + TEST_CTOR((_T("Hello"), 4), _T("Hell")); + TEST_CTOR((_T("Hello"), 5), _T("Hello")); + // TEST_CTOR((_T("Hello"), 6), _T("Hello")); -- should give assert failure + + static const wxChar *s = _T("?really!"); + const wxChar *start = wxStrchr(s, _T('r')); + const wxChar *end = wxStrchr(s, _T('!')); + TEST_CTOR((start, end), _T("really")); + + puts(""); +} static void TestString() { @@ -1749,6 +1810,179 @@ static void TestStringFormat() 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 wxChar *modeNames[] = + { + _T("default"), + _T("return empty"), + _T("return all empty"), + _T("with delims"), + _T("like strtok"), + }; + + static const struct StringTokenizerTest + { + const wxChar *str; // string to tokenize + const wxChar *delims; // delimiters to use + size_t count; // count of token + wxStringTokenizerMode mode; // how should we tokenize it + } tokenizerTestData[] = + { + { _T(""), _T(" "), 0 }, + { _T("Hello, world"), _T(" "), 2 }, + { _T("Hello, world "), _T(" "), 2 }, + { _T("Hello, world"), _T(","), 2 }, + { _T("Hello, world!"), _T(",!"), 2 }, + { _T("Hello,, world!"), _T(",!"), 3 }, + { _T("Hello, world!"), _T(",!"), 3, wxTOKEN_RET_EMPTY_ALL }, + { _T("username:password:uid:gid:gecos:home:shell"), _T(":"), 7 }, + { _T("1 \t3\t4 6 "), wxDEFAULT_DELIMITERS, 4 }, + { _T("1 \t3\t4 6 "), wxDEFAULT_DELIMITERS, 6, wxTOKEN_RET_EMPTY }, + { _T("1 \t3\t4 6 "), wxDEFAULT_DELIMITERS, 9, wxTOKEN_RET_EMPTY_ALL }, + { _T("01/02/99"), _T("/-"), 3 }, + { _T("01-02/99"), _T("/-"), 3, wxTOKEN_RET_DELIMS }, + }; + + for ( size_t n = 0; n < WXSIZEOF(tokenizerTestData); n++ ) + { + const StringTokenizerTest& tt = tokenizerTestData[n]; + wxStringTokenizer tkz(tt.str, tt.delims, tt.mode); + + size_t count = tkz.CountTokens(); + printf(_T("String '%s' has %u tokens delimited by '%s' (mode = %s) "), + MakePrintable(tt.str).c_str(), + count, + MakePrintable(tt.delims).c_str(), + modeNames[tkz.GetMode()]); + if ( count == tt.count ) + { + puts(_T("(ok)")); + } + else + { + printf(_T("(ERROR: should be %u)\n"), tt.count); + + continue; + } + + // if we emulate strtok(), check that we do it correctly + wxChar *buf, *s, *last; + + if ( tkz.GetMode() == wxTOKEN_STRTOK ) + { + buf = new wxChar[wxStrlen(tt.str) + 1]; + wxStrcpy(buf, tt.str); + + s = wxStrtok(buf, tt.delims, &last); + } + else + { + buf = NULL; + } + + // now show the tokens themselves + size_t count2 = 0; + while ( tkz.HasMoreTokens() ) + { + wxString token = tkz.GetNextToken(); + + printf(_T("\ttoken %u: '%s'"), + ++count2, + MakePrintable(token).c_str()); + + if ( buf ) + { + if ( token == s ) + { + puts(" (ok)"); + } + else + { + printf(" (ERROR: should be %s)\n", s); + } + + s = wxStrtok(NULL, tt.delims, &last); + } + else + { + // nothing to compare with + puts(""); + } + } + + if ( count2 != count ) + { + puts(_T("\tERROR: token count mismatch")); + } + + delete [] buf; + } + + puts(""); +} + #endif // TEST_STRINGS // ---------------------------------------------------------------------------- @@ -1810,9 +2044,12 @@ int main(int argc, char **argv) } if ( 0 ) { + TestStringConstruction(); TestStringSub(); + TestStringFormat(); + TestStringFind(); } - TestStringFormat(); + TestStringTokenizer(); #endif // TEST_STRINGS #ifdef TEST_ARRAYS @@ -1851,6 +2088,10 @@ int main(int argc, char **argv) TestDirEnum(); #endif // TEST_DIR +#ifdef TEST_EXECUTE + TestExecute(); +#endif // TEST_EXECUTE + #ifdef TEST_LOG wxString s; for ( size_t n = 0; n < 8000; n++ )