Module: wine Branch: master Commit: 73d6140d7134ac39a13710a71b3356df110a1324 URL: https://gitlab.winehq.org/wine/wine/-/commit/73d6140d7134ac39a13710a71b3356d...
Author: Rémi Bernon rbernon@codeweavers.com Date: Mon Dec 19 11:39:38 2022 +0100
user32/tests: Test EnableMouseInPointer behavior.
---
dlls/user32/tests/input.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+)
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index 86c88520eeb..fde5aedeb4a 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -81,6 +81,7 @@ static struct { BOOL sendinput_broken; } key_status;
+static BOOL (WINAPI *pEnableMouseInPointer)( BOOL ); static BOOL (WINAPI *pGetCurrentInputMessageSource)( INPUT_MESSAGE_SOURCE *source ); static BOOL (WINAPI *pGetPointerType)(UINT32, POINTER_INPUT_TYPE*); static BOOL (WINAPI *pGetPointerInfo)(UINT32, POINTER_INFO*); @@ -149,6 +150,7 @@ static void init_function_pointers(void) if (!(p ## func = (void*)GetProcAddress(hdll, #func))) \ trace("GetProcAddress(%s) failed\n", #func)
+ GET_PROC(EnableMouseInPointer); GET_PROC(GetCurrentInputMessageSource); GET_PROC(GetMouseMovePointsEx); GET_PROC(GetPointerInfo); @@ -4590,6 +4592,43 @@ static void test_SendInput(void) DestroyWindow( hwnd ); }
+static void test_EnableMouseInPointer_process( const char *arg ) +{ + DWORD enable = strtoul( arg, 0, 10 ); + BOOL ret; + + ret = pEnableMouseInPointer( enable ); + todo_wine + ok( ret, "EnableMouseInPointer failed, error %lu\n", GetLastError() ); + + SetLastError( 0xdeadbeef ); + ret = pEnableMouseInPointer( !enable ); + ok( !ret, "EnableMouseInPointer succeeded\n" ); + todo_wine + ok( GetLastError() == ERROR_ACCESS_DENIED, "got error %lu\n", GetLastError() ); + + ret = pEnableMouseInPointer( enable ); + todo_wine + ok( ret, "EnableMouseInPointer failed, error %lu\n", GetLastError() ); +} + +static void test_EnableMouseInPointer( char **argv, BOOL enable ) +{ + STARTUPINFOA startup = {.cb = sizeof(STARTUPINFOA)}; + PROCESS_INFORMATION info = {0}; + char cmdline[MAX_PATH * 2]; + BOOL ret; + + sprintf( cmdline, "%s %s EnableMouseInPointer %u", argv[0], argv[1], enable ); + ret = CreateProcessA( NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &info ); + ok( ret, "CreateProcessA failed, error %lu\n", GetLastError() ); + if (!ret) return; + + wait_child_process( info.hProcess ); + CloseHandle( info.hThread ); + CloseHandle( info.hProcess ); +} + START_TEST(input) { char **argv; @@ -4612,6 +4651,14 @@ START_TEST(input) return; }
+ if (argc >= 4 && strcmp( argv[2], "EnableMouseInPointer" ) == 0) + { + winetest_push_context( "enable %s", argv[3] ); + test_EnableMouseInPointer_process( argv[3] ); + winetest_pop_context(); + return; + } + test_SendInput(); test_Input_blackbox(); test_Input_whitebox(); @@ -4657,4 +4704,12 @@ START_TEST(input) win_skip("GetPointerType is not available\n");
test_UnregisterDeviceNotification(); + + if (!pEnableMouseInPointer) + win_skip( "EnableMouseInPointer not found, skipping tests\n" ); + else + { + test_EnableMouseInPointer( argv, FALSE ); + test_EnableMouseInPointer( argv, TRUE ); + } }