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