kernel32/tests: Add CreatePseudoConsole tests.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
0ec191eb0f
commit
36663d9abd
|
@ -24,6 +24,8 @@
|
||||||
#include <winternl.h>
|
#include <winternl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static void (WINAPI *pClosePseudoConsole)(HPCON);
|
||||||
|
static HRESULT (WINAPI *pCreatePseudoConsole)(COORD,HANDLE,HANDLE,DWORD,HPCON*);
|
||||||
static BOOL (WINAPI *pGetConsoleInputExeNameA)(DWORD, LPSTR);
|
static BOOL (WINAPI *pGetConsoleInputExeNameA)(DWORD, LPSTR);
|
||||||
static DWORD (WINAPI *pGetConsoleProcessList)(LPDWORD, DWORD);
|
static DWORD (WINAPI *pGetConsoleProcessList)(LPDWORD, DWORD);
|
||||||
static HANDLE (WINAPI *pOpenConsoleW)(LPCWSTR,DWORD,BOOL,DWORD);
|
static HANDLE (WINAPI *pOpenConsoleW)(LPCWSTR,DWORD,BOOL,DWORD);
|
||||||
|
@ -68,6 +70,8 @@ static void init_function_pointers(void)
|
||||||
if(!p##func) trace("GetProcAddress(hKernel32, '%s') failed\n", #func);
|
if(!p##func) trace("GetProcAddress(hKernel32, '%s') failed\n", #func);
|
||||||
|
|
||||||
hKernel32 = GetModuleHandleA("kernel32.dll");
|
hKernel32 = GetModuleHandleA("kernel32.dll");
|
||||||
|
KERNEL32_GET_PROC(ClosePseudoConsole);
|
||||||
|
KERNEL32_GET_PROC(CreatePseudoConsole);
|
||||||
KERNEL32_GET_PROC(GetConsoleInputExeNameA);
|
KERNEL32_GET_PROC(GetConsoleInputExeNameA);
|
||||||
KERNEL32_GET_PROC(GetConsoleProcessList);
|
KERNEL32_GET_PROC(GetConsoleProcessList);
|
||||||
KERNEL32_GET_PROC(OpenConsoleW);
|
KERNEL32_GET_PROC(OpenConsoleW);
|
||||||
|
@ -3941,6 +3945,59 @@ static void test_AllocConsole(void)
|
||||||
CloseHandle(pipe_write);
|
CloseHandle(pipe_write);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static DWORD WINAPI read_pipe_proc( void *handle )
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
DWORD size;
|
||||||
|
while (ReadFile(handle, buf, sizeof(buf), &size, NULL));
|
||||||
|
ok(GetLastError() == ERROR_BROKEN_PIPE, "ReadFile returned %u\n", GetLastError());
|
||||||
|
CloseHandle(handle);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_pseudo_console(void)
|
||||||
|
{
|
||||||
|
HANDLE console_pipe, console_pipe2, thread;
|
||||||
|
HPCON pseudo_console;
|
||||||
|
COORD size;
|
||||||
|
HRESULT hres;
|
||||||
|
|
||||||
|
if (!pCreatePseudoConsole)
|
||||||
|
{
|
||||||
|
win_skip("CreatePseudoConsole not available\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console_pipe = CreateNamedPipeW(L"\\\\.\\pipe\\pseudoconsoleconn", PIPE_ACCESS_DUPLEX,
|
||||||
|
PIPE_WAIT | PIPE_TYPE_BYTE, 1, 4096, 4096, NMPWAIT_USE_DEFAULT_WAIT, NULL);
|
||||||
|
ok(console_pipe != INVALID_HANDLE_VALUE, "CreateNamedPipeW failed: %u\n", GetLastError());
|
||||||
|
|
||||||
|
console_pipe2 = CreateFileW(L"\\\\.\\pipe\\pseudoconsoleconn", GENERIC_READ | GENERIC_WRITE, 0, NULL,
|
||||||
|
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
||||||
|
ok(console_pipe2 != INVALID_HANDLE_VALUE, "CreateFile failed: %u\n", GetLastError());
|
||||||
|
|
||||||
|
thread = CreateThread( NULL, 0, read_pipe_proc, console_pipe, 0, NULL );
|
||||||
|
CloseHandle(thread);
|
||||||
|
|
||||||
|
size.X = 0;
|
||||||
|
size.Y = 30;
|
||||||
|
hres = pCreatePseudoConsole(size, console_pipe2, console_pipe2, 0, &pseudo_console);
|
||||||
|
ok(hres == E_INVALIDARG, "CreatePseudoConsole failed: %08x\n", hres);
|
||||||
|
|
||||||
|
size.X = 40;
|
||||||
|
size.Y = 0;
|
||||||
|
hres = pCreatePseudoConsole(size, console_pipe2, console_pipe2, 0, &pseudo_console);
|
||||||
|
ok(hres == E_INVALIDARG, "CreatePseudoConsole failed: %08x\n", hres);
|
||||||
|
|
||||||
|
size.X = 40;
|
||||||
|
size.Y = 30;
|
||||||
|
hres = pCreatePseudoConsole(size, console_pipe2, console_pipe2, 0, &pseudo_console);
|
||||||
|
ok(hres == S_OK, "CreatePseudoConsole failed: %08x\n", hres);
|
||||||
|
CloseHandle(console_pipe2);
|
||||||
|
|
||||||
|
pClosePseudoConsole(pseudo_console);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(console)
|
START_TEST(console)
|
||||||
{
|
{
|
||||||
HANDLE hConIn, hConOut;
|
HANDLE hConIn, hConOut;
|
||||||
|
@ -4123,5 +4180,6 @@ START_TEST(console)
|
||||||
test_AttachConsole(hConOut);
|
test_AttachConsole(hConOut);
|
||||||
test_AllocConsole();
|
test_AllocConsole();
|
||||||
test_FreeConsole();
|
test_FreeConsole();
|
||||||
|
test_pseudo_console();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue