]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/console/console.cpp
fix for wxExecute(subprocess which produces a lot of output) bug
[wxWidgets.git] / samples / console / console.cpp
index 8c89e05dbf7c38678eaade017b17e944be7aa959..f7f43fc2ea04270a6b01d316b47268d251ca4399 100644 (file)
@@ -54,7 +54,7 @@
 //#define TEST_FILENAME
 //#define TEST_FTP
 //#define TEST_HASH
-//#define TEST_INFO_FUNCTIONS
+#define TEST_INFO_FUNCTIONS
 //#define TEST_LIST
 //#define TEST_LOCALE
 //#define TEST_LOG
@@ -62,7 +62,7 @@
 //#define TEST_MIME
 //#define TEST_PATHLIST
 //#define TEST_REGCONF
-#define TEST_REGEX
+//#define TEST_REGEX
 //#define TEST_REGISTRY
 //#define TEST_SNGLINST
 //#define TEST_SOCKETS
@@ -1364,6 +1364,35 @@ static void TestMimeAssociate()
 
 #include <wx/utils.h>
 
+static void TestDiskInfo()
+{
+    puts("*** Testing wxGetDiskSpace() ***");
+
+    for ( ;; )
+    {
+        char pathname[128];
+        printf("\nEnter a directory name: ");
+        if ( !fgets(pathname, WXSIZEOF(pathname), stdin) )
+            break;
+
+        // kill the last '\n'
+        pathname[strlen(pathname) - 1] = 0;
+
+        wxLongLong total, free;
+        if ( !wxGetDiskSpace(pathname, &total, &free) )
+        {
+            wxPuts(_T("ERROR: wxGetDiskSpace failed."));
+        }
+        else
+        {
+            wxPrintf(_T("%sKb total, %sKb free on '%s'.\n"),
+                    (total / 1024).ToString().c_str(),
+                    (free / 1024).ToString().c_str(),
+                    pathname);
+        }
+    }
+}
+
 static void TestOsInfo()
 {
     puts("*** Testing OS info functions ***\n");
@@ -1410,6 +1439,17 @@ static void TestUserInfo()
 // get a random 64 bit number
 #define RAND_LL()   MAKE_LL(rand(), rand(), rand(), rand())
 
+static const long testLongs[] =
+{
+    0,
+    1,
+    -1,
+    LONG_MAX,
+    LONG_MIN,
+    0x1234,
+    -0x1234
+};
+
 #if wxUSE_LONGLONG_WX
 inline bool operator==(const wxLongLongWx& a, const wxLongLongNative& b)
     { return a.GetHi() == b.GetHi() && a.GetLo() == b.GetLo(); }
@@ -1635,17 +1675,6 @@ static void TestLongLongComparison()
 #if wxUSE_LONGLONG_WX
     puts("*** Testing wxLongLong comparison ***\n");
 
-    static const long testLongs[] =
-    {
-        0,
-        1,
-        -1,
-        LONG_MAX,
-        LONG_MIN,
-        0x1234,
-        -0x1234
-    };
-
     static const long ls[2] =
     {
         0x1234,
@@ -1654,7 +1683,7 @@ static void TestLongLongComparison()
 
     wxLongLongWx lls[2];
     lls[0] = ls[0];
-    lls[1] = ls[1]; 
+    lls[1] = ls[1];
 
     for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ )
     {
@@ -1681,6 +1710,23 @@ static void TestLongLongComparison()
 #endif // wxUSE_LONGLONG_WX
 }
 
+static void TestLongLongPrint()
+{
+    wxPuts(_T("*** Testing wxLongLong printing ***\n"));
+
+    for ( size_t n = 0; n < WXSIZEOF(testLongs); n++ )
+    {
+        wxLongLong ll = testLongs[n];
+        wxPrintf(_T("%ld == %s\n"), testLongs[n], ll.ToString().c_str());
+    }
+
+    wxLongLong ll(0x12345678, 0x87654321);
+    wxPrintf(_T("0x1234567887654321 = %s\n"), ll.ToString().c_str());
+
+    ll.Negate();
+    wxPrintf(_T("-0x1234567887654321 = %s\n"), ll.ToString().c_str());
+}
+
 #undef MAKE_LL
 #undef RAND_LL
 
@@ -1827,6 +1873,55 @@ static void TestRegExSubmatch()
     }
 }
 
+static void TestRegExReplacement()
+{
+    wxPuts(_T("*** Testing RE replacement ***"));
+
+    static struct RegExReplTestData
+    {
+        const wxChar *text;
+        const wxChar *repl;
+        const wxChar *result;
+        size_t count;
+    } regExReplTestData[] =
+    {
+        { _T("foo123"), _T("bar"), _T("bar"), 1 },
+        { _T("foo123"), _T("\\2\\1"), _T("123foo"), 1 },
+        { _T("foo_123"), _T("\\2\\1"), _T("123foo"), 1 },
+        { _T("123foo"), _T("bar"), _T("123foo"), 0 },
+        { _T("123foo456foo"), _T("&&"), _T("123foo456foo456foo"), 1 },
+        { _T("foo123foo123"), _T("bar"), _T("barbar"), 2 },
+        { _T("foo123_foo456_foo789"), _T("bar"), _T("bar_bar_bar"), 3 },
+    };
+
+    const wxChar *pattern = _T("([a-z]+)[^0-9]*([0-9]+)");
+    wxRegEx re = pattern;
+
+    wxPrintf(_T("Using pattern '%s' for replacement.\n"), pattern);
+
+    for ( size_t n = 0; n < WXSIZEOF(regExReplTestData); n++ )
+    {
+        const RegExReplTestData& data = regExReplTestData[n];
+
+        wxString text = data.text;
+        size_t nRepl = re.Replace(&text, data.repl);
+
+        wxPrintf(_T("%s =~ s/RE/%s/g: %u match%s, result = '%s' ("),
+                 data.text, data.repl,
+                 nRepl, nRepl == 1 ? _T("") : _T("es"),
+                 text.c_str());
+        if ( text == data.result && nRepl == data.count )
+        {
+            wxPuts(_T("ok)"));
+        }
+        else
+        {
+            wxPrintf(_T("ERROR: should be %u and '%s')\n"),
+                     data.count, data.result);
+        }
+    }
+}
+
 static void TestRegExInteractive()
 {
     wxPuts(_T("*** Testing RE interactively ***"));
@@ -3990,6 +4085,7 @@ static void TestTimeSpanFormat()
         _T("(with ms) %H:%M:%S:%l"),
         _T("100%% of minutes is %M"),       // test "%%"
         _T("%D days and %H hours"),
+        _T("or also %S seconds"),
     };
 
     wxTimeSpan ts1(1, 2, 3, 4),
@@ -5034,8 +5130,9 @@ int main(int argc, char **argv)
         TestAddition();
         TestLongLongConversion();
         TestBitOperations();
+        TestLongLongComparison();
     }
-    TestLongLongComparison();
+    TestLongLongPrint();
 #endif // TEST_LONGLONG
 
 #ifdef TEST_HASH
@@ -5055,8 +5152,12 @@ int main(int argc, char **argv)
 #endif // TEST_MIME
 
 #ifdef TEST_INFO_FUNCTIONS
-    TestOsInfo();
-    TestUserInfo();
+    TestDiskInfo();
+    if ( 0 )
+    {
+        TestOsInfo();
+        TestUserInfo();
+    }
 #endif // TEST_INFO_FUNCTIONS
 
 #ifdef TEST_PATHLIST
@@ -5074,8 +5175,9 @@ int main(int argc, char **argv)
         TestRegExCompile();
         TestRegExMatch();
         TestRegExSubmatch();
+        TestRegExInteractive();
     }
-    TestRegExInteractive();
+    TestRegExReplacement();
 #endif // TEST_REGEX
 
 #ifdef TEST_REGISTRY