Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com --- dlls/kernel32/tests/console.c | 149 ++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+)
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c index bd5cad428bc..2097e8e53d3 100644 --- a/dlls/kernel32/tests/console.c +++ b/dlls/kernel32/tests/console.c @@ -3536,6 +3536,154 @@ static void test_GetCurrentConsoleFontEx(HANDLE std_output) ok(cfix.dwFontSize.Y == cfi.dwFontSize.Y, "expected values to match\n"); }
+static void test_SetCurrentConsoleFontEx(HANDLE std_output) +{ + HANDLE hmod; + BOOL (WINAPI *pGetCurrentConsoleFontEx)(HANDLE, BOOL, CONSOLE_FONT_INFOEX *); + BOOL (WINAPI *pSetCurrentConsoleFontEx)(HANDLE, BOOL, CONSOLE_FONT_INFOEX *); + CONSOLE_FONT_INFOEX orig_cfix, cfix; + BOOL ret; + HANDLE pipe1, pipe2; + HANDLE std_input = GetStdHandle(STD_INPUT_HANDLE); + + hmod = GetModuleHandleA("kernel32.dll"); + pGetCurrentConsoleFontEx = (void *)GetProcAddress(hmod, "GetCurrentConsoleFontEx"); + pSetCurrentConsoleFontEx = (void *)GetProcAddress(hmod, "SetCurrentConsoleFontEx"); + + if (!pGetCurrentConsoleFontEx || !pSetCurrentConsoleFontEx) + { + win_skip("GetCurrentConsoleFontEx and SetCurrentConsoleFontEx are not available\n"); + return; + } + + orig_cfix.cbSize = sizeof(CONSOLE_FONT_INFOEX); + + ret = pGetCurrentConsoleFontEx(std_output, FALSE, &orig_cfix); + ok(ret, "got %d, expected non-zero\n", ret); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(NULL, FALSE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(NULL, TRUE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + + CreatePipe(&pipe1, &pipe2, NULL, 0); + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(pipe1, FALSE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + CloseHandle(pipe1); + CloseHandle(pipe2); + + CreatePipe(&pipe1, &pipe2, NULL, 0); + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(pipe1, TRUE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + CloseHandle(pipe1); + CloseHandle(pipe2); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_input, FALSE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_input, TRUE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_output, FALSE, &cfix); + ok(!ret || broken(ret), "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER || + broken(GetLastError() == 0xdeadbeef), "got %u, expected 87\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_output, TRUE, &cfix); + ok(!ret || broken(ret), "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER || + broken(GetLastError() == 0xdeadbeef), "got %u, expected 87\n", GetLastError()); + + cfix.cbSize = sizeof(CONSOLE_FONT_INFOEX); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(NULL, FALSE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(NULL, TRUE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + + CreatePipe(&pipe1, &pipe2, NULL, 0); + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(pipe1, FALSE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError()); + CloseHandle(pipe1); + CloseHandle(pipe2); + + CreatePipe(&pipe1, &pipe2, NULL, 0); + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(pipe1, TRUE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_HANDLE, "got %u, expected 6\n", GetLastError()); + CloseHandle(pipe1); + CloseHandle(pipe2); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_input, FALSE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_input, TRUE, &cfix); + ok(!ret, "got %d, expected 0\n", ret); + todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER /* 32-bit */ || + GetLastError() == ERROR_INVALID_HANDLE /* 64-bit */, + "got %u, expected 87 (32-bit) or 6 (64-bit)\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_output, FALSE, &cfix); + todo_wine ok(ret, "got %d, expected non-zero\n", ret); + todo_wine ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError()); + + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_output, TRUE, &cfix); + todo_wine ok(ret, "got %d, expected non-zero\n", ret); + todo_wine ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError()); + + /* Restore original console font parameters */ + SetLastError(0xdeadbeef); + ret = pSetCurrentConsoleFontEx(std_output, FALSE, &orig_cfix); + todo_wine ok(ret, "got %d, expected non-zero\n", ret); + todo_wine ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError()); +} + static void test_GetConsoleFontSize(HANDLE std_output) { COORD c; @@ -4688,6 +4836,7 @@ START_TEST(console) { test_GetCurrentConsoleFont(hConOut); test_GetCurrentConsoleFontEx(hConOut); + test_SetCurrentConsoleFontEx(hConOut); test_GetConsoleFontSize(hConOut); test_GetLargestConsoleWindowSize(hConOut); test_GetConsoleFontInfo(hConOut);
Hi Hugh,
On 8/16/21 2:27 PM, Hugh McMaster wrote:
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com
dlls/kernel32/tests/console.c | 149 ++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+)
diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c index bd5cad428bc..2097e8e53d3 100644 --- a/dlls/kernel32/tests/console.c +++ b/dlls/kernel32/tests/console.c @@ -3536,6 +3536,154 @@ static void test_GetCurrentConsoleFontEx(HANDLE std_output) ok(cfix.dwFontSize.Y == cfi.dwFontSize.Y, "expected values to match\n"); }
+static void test_SetCurrentConsoleFontEx(HANDLE std_output) +{
- HANDLE hmod;
- BOOL (WINAPI *pGetCurrentConsoleFontEx)(HANDLE, BOOL, CONSOLE_FONT_INFOEX *);
- BOOL (WINAPI *pSetCurrentConsoleFontEx)(HANDLE, BOOL, CONSOLE_FONT_INFOEX *);
- CONSOLE_FONT_INFOEX orig_cfix, cfix;
- BOOL ret;
- HANDLE pipe1, pipe2;
- HANDLE std_input = GetStdHandle(STD_INPUT_HANDLE);
- hmod = GetModuleHandleA("kernel32.dll");
- pGetCurrentConsoleFontEx = (void *)GetProcAddress(hmod, "GetCurrentConsoleFontEx");
- pSetCurrentConsoleFontEx = (void *)GetProcAddress(hmod, "SetCurrentConsoleFontEx");
- if (!pGetCurrentConsoleFontEx || !pSetCurrentConsoleFontEx)
- {
win_skip("GetCurrentConsoleFontEx and SetCurrentConsoleFontEx are not available\n");
return;
- }
Those seem to be available since Vista, so you may just link to them directly, there is no need for GetProcAddress.
- cfix.cbSize = sizeof(CONSOLE_FONT_INFOEX);
(...)
- SetLastError(0xdeadbeef);
- ret = pSetCurrentConsoleFontEx(std_output, FALSE, &cfix);
- todo_wine ok(ret, "got %d, expected non-zero\n", ret);
- todo_wine ok(GetLastError() == 0xdeadbeef, "got %u, expected 0xdeadbeef\n", GetLastError());
You only initialize cbSize of cfix, so other fields are uninitialized. Maybe those functions accept any input or maybe you're lucky that it works. In any case I would suggest to initialize entire struct to make tests more predictable.
Thanks,
Jacek