Jacek Caban : kernel32/tests: Add an option to test current console.

Alexandre Julliard julliard at winehq.org
Wed Aug 12 16:28:39 CDT 2020


Module: wine
Branch: master
Commit: 5a6341d8c7cbd19308dead261ef67c5c1e5e4f0b
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5a6341d8c7cbd19308dead261ef67c5c1e5e4f0b

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Aug 12 15:10:37 2020 +0200

kernel32/tests: Add an option to test current console.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/tests/console.c | 136 ++++++++++++++++++++++--------------------
 1 file changed, 71 insertions(+), 65 deletions(-)

diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
index 69d9ae2da0..5e7754d648 100644
--- a/dlls/kernel32/tests/console.c
+++ b/dlls/kernel32/tests/console.c
@@ -3872,14 +3872,9 @@ static void test_AllocConsole(void)
 
 START_TEST(console)
 {
-    static const char font_name[] = "Lucida Console";
     HANDLE hConIn, hConOut;
-    BOOL ret;
+    BOOL ret, test_current;
     CONSOLE_SCREEN_BUFFER_INFO	sbi;
-    LONG err;
-    HKEY console_key;
-    char old_font[LF_FACESIZE];
-    BOOL delete = FALSE;
     DWORD size;
     char **argv;
     int argc;
@@ -3902,62 +3897,67 @@ START_TEST(console)
         return;
     }
 
-    /* be sure we have a clean console (and that's our own)
-     * FIXME: this will make the test fail (currently) if we don't run
-     * under X11
-     * Another solution would be to rerun the test under wineconsole with
-     * the curses backend
-     */
+    test_current = argc >= 3 && !strcmp(argv[2], "--current");
 
-    /* ReadConsoleOutputW doesn't retrieve characters from the output buffer
-     * correctly for characters that don't have a glyph in the console font. So,
-     * we first set the console font to Lucida Console (which has a wider
-     * selection of glyphs available than the default raster fonts). We want
-     * to be able to restore the original font afterwards, so don't change
-     * if we can't read the original font.
-     */
-    err = RegOpenKeyExA(HKEY_CURRENT_USER, "Console", 0,
-                        KEY_QUERY_VALUE | KEY_SET_VALUE, &console_key);
-    if (err == ERROR_SUCCESS)
-    {
-        size = sizeof(old_font);
-        err = RegQueryValueExA(console_key, "FaceName", NULL, NULL,
-                               (LPBYTE) old_font, &size);
-        if (err == ERROR_SUCCESS || err == ERROR_FILE_NOT_FOUND)
+    if (!test_current)
+    {
+        static const char font_name[] = "Lucida Console";
+        HKEY console_key;
+        char old_font[LF_FACESIZE];
+        BOOL delete = FALSE;
+        LONG err;
+
+        /* ReadConsoleOutputW doesn't retrieve characters from the output buffer
+         * correctly for characters that don't have a glyph in the console font. So,
+         * we first set the console font to Lucida Console (which has a wider
+         * selection of glyphs available than the default raster fonts). We want
+         * to be able to restore the original font afterwards, so don't change
+         * if we can't read the original font.
+         */
+        err = RegOpenKeyExA(HKEY_CURRENT_USER, "Console", 0,
+                            KEY_QUERY_VALUE | KEY_SET_VALUE, &console_key);
+        if (err == ERROR_SUCCESS)
         {
-            delete = (err == ERROR_FILE_NOT_FOUND);
-            err = RegSetValueExA(console_key, "FaceName", 0, REG_SZ,
-                                 (const BYTE *) font_name, sizeof(font_name));
-            if (err != ERROR_SUCCESS)
-                trace("Unable to change default console font, error %d\n", err);
+            size = sizeof(old_font);
+            err = RegQueryValueExA(console_key, "FaceName", NULL, NULL,
+                                   (LPBYTE) old_font, &size);
+            if (err == ERROR_SUCCESS || err == ERROR_FILE_NOT_FOUND)
+            {
+                delete = (err == ERROR_FILE_NOT_FOUND);
+                err = RegSetValueExA(console_key, "FaceName", 0, REG_SZ,
+                                     (const BYTE *) font_name, sizeof(font_name));
+                if (err != ERROR_SUCCESS)
+                    trace("Unable to change default console font, error %d\n", err);
+            }
+            else
+            {
+                trace("Unable to query default console font, error %d\n", err);
+                RegCloseKey(console_key);
+                console_key = NULL;
+            }
         }
         else
         {
-            trace("Unable to query default console font, error %d\n", err);
-            RegCloseKey(console_key);
+            trace("Unable to open HKCU\\Console, error %d\n", err);
             console_key = NULL;
         }
-    }
-    else
-    {
-        trace("Unable to open HKCU\\Console, error %d\n", err);
-        console_key = NULL;
-    }
 
-    /* Now detach and open a fresh console to play with */
-    FreeConsole();
-    ok(AllocConsole(), "Couldn't alloc console\n");
+        /* Now detach and open a fresh console to play with */
+        FreeConsole();
+        ok(AllocConsole(), "Couldn't alloc console\n");
 
-    /* Restore default console font if needed */
-    if (console_key != NULL)
-    {
-        if (delete)
-            err = RegDeleteValueA(console_key, "FaceName");
-        else
-            err = RegSetValueExA(console_key, "FaceName", 0, REG_SZ,
-                                 (const BYTE *) old_font, strlen(old_font) + 1);
-        ok(err == ERROR_SUCCESS, "Unable to restore default console font, error %d\n", err);
+        /* Restore default console font if needed */
+        if (console_key != NULL)
+        {
+            if (delete)
+                err = RegDeleteValueA(console_key, "FaceName");
+            else
+                err = RegSetValueExA(console_key, "FaceName", 0, REG_SZ,
+                                     (const BYTE *) old_font, strlen(old_font) + 1);
+            ok(err == ERROR_SUCCESS, "Unable to restore default console font, error %d\n", err);
+        }
     }
+
     hConIn = CreateFileA("CONIN$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
     hConOut = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
 
@@ -3993,19 +3993,22 @@ START_TEST(console)
     /* will test all the scrolling operations */
     testScroll(hConOut, sbi.dwSize);
     /* will test sb creation / modification / codepage handling */
-    testScreenBuffer(hConOut);
+    if (!test_current) testScreenBuffer(hConOut);
     /* Test waiting for a console handle */
     testWaitForConsoleInput(hConIn);
 
-    /* clear duplicated console font table */
-    CloseHandle(hConIn);
-    CloseHandle(hConOut);
-    FreeConsole();
-    ok(AllocConsole(), "Couldn't alloc console\n");
-    hConIn = CreateFileA("CONIN$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
-    hConOut = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
-    ok(hConIn != INVALID_HANDLE_VALUE, "Opening ConIn\n");
-    ok(hConOut != INVALID_HANDLE_VALUE, "Opening ConOut\n");
+    if (!test_current)
+    {
+        /* clear duplicated console font table */
+        CloseHandle(hConIn);
+        CloseHandle(hConOut);
+        FreeConsole();
+        ok(AllocConsole(), "Couldn't alloc console\n");
+        hConIn = CreateFileA("CONIN$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
+        hConOut = CreateFileA("CONOUT$", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
+        ok(hConIn != INVALID_HANDLE_VALUE, "Opening ConIn\n");
+        ok(hConOut != INVALID_HANDLE_VALUE, "Opening ConOut\n");
+    }
 
     testCtrlHandler();
     /* still to be done: access rights & access on objects */
@@ -4043,7 +4046,10 @@ START_TEST(console)
     test_SetConsoleFont(hConOut);
     test_GetConsoleScreenBufferInfoEx(hConOut);
     test_SetConsoleScreenBufferInfoEx(hConOut);
-    test_AttachConsole(hConOut);
-    test_AllocConsole();
-    test_FreeConsole();
+    if (!test_current)
+    {
+        test_AttachConsole(hConOut);
+        test_AllocConsole();
+        test_FreeConsole();
+    }
 }




More information about the wine-cvs mailing list