]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/console/console.cpp
fixed bug in handling quoted characters in value names
[wxWidgets.git] / samples / console / console.cpp
index e01cf964bf4935a097787f79a15863177b5b2afd..bd8b550139e42a25fc2ed945e9bb6c5e43d525a8 100644 (file)
 //#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 <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
 // ----------------------------------------------------------------------------
@@ -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()
 {
@@ -1670,6 +1699,7 @@ void PrintArray(const char* name, const wxArrayString& array)
 #ifdef TEST_STRINGS
 
 #include "wx/timer.h"
+#include "wx/tokenzr.h"
 
 static void TestString()
 {
@@ -1749,6 +1779,125 @@ 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 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
 
 // ----------------------------------------------------------------------------
@@ -1811,8 +1960,10 @@ int main(int argc, char **argv)
     if ( 0 )
     {
         TestStringSub();
+        TestStringFormat();
+        TestStringFind();
     }
-    TestStringFormat();
+    TestStringTokenizer();
 #endif // TEST_STRINGS
 
 #ifdef TEST_ARRAYS
@@ -1851,6 +2002,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++ )