From: "Rémi Bernon" Subject: [PATCH v3 1/6] user32/tests: Add basic GetRegisteredRawInputDevices tests. Message-Id: <20200703095707.720159-1-rbernon@codeweavers.com> Date: Fri, 3 Jul 2020 11:57:02 +0200 There's already some in dinput, but this is a more appropriate location. Signed-off-by: Rémi Bernon --- v3: Add some more error case tests with insufficient buffer sizes. dlls/user32/tests/input.c | 79 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 4 deletions(-) diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index bab0fd97536..4310ad1f296 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -1764,11 +1764,15 @@ static void test_GetRawInputData(void) static void test_RegisterRawInputDevices(void) { HWND hwnd; - RAWINPUTDEVICE raw_devices[1]; + RAWINPUTDEVICE raw_devices[2]; + UINT count, raw_devices_count; BOOL res; + memset(raw_devices, 0, sizeof(raw_devices)); raw_devices[0].usUsagePage = 0x01; raw_devices[0].usUsage = 0x05; + raw_devices[1].usUsagePage = 0x01; + raw_devices[1].usUsage = 0x04; hwnd = CreateWindowExA(WS_EX_TOPMOST, "static", "dinput", WS_POPUP | WS_VISIBLE, 0, 0, 100, 100, NULL, NULL, NULL, NULL); ok(hwnd != NULL, "CreateWindowExA failed\n"); @@ -1778,9 +1782,6 @@ static void test_RegisterRawInputDevices(void) ok(res == FALSE, "RegisterRawInputDevices succeeded\n"); - raw_devices[0].dwFlags = 0; - raw_devices[0].hwndTarget = 0; - SetLastError(0xdeadbeef); res = RegisterRawInputDevices(raw_devices, ARRAY_SIZE(raw_devices), 0); ok(res == FALSE, "RegisterRawInputDevices succeeded\n"); @@ -1791,10 +1792,76 @@ static void test_RegisterRawInputDevices(void) ok(res == TRUE, "RegisterRawInputDevices failed\n"); ok(GetLastError() == 0xdeadbeef, "RegisterRawInputDevices returned %08x\n", GetLastError()); + SetLastError(0xdeadbeef); + count = GetRegisteredRawInputDevices(NULL, NULL, 0); + todo_wine + ok(count == ~0U, "GetRegisteredRawInputDevices returned %u\n", count); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetRegisteredRawInputDevices unexpected error %08x\n", GetLastError()); + + SetLastError(0xdeadbeef); + raw_devices_count = 0; + count = GetRegisteredRawInputDevices(NULL, &raw_devices_count, 0); + todo_wine + ok(count == ~0U, "GetRegisteredRawInputDevices returned %u\n", count); + ok(raw_devices_count == 0, "Unexpected registered devices count: %u\n", raw_devices_count); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetRegisteredRawInputDevices unexpected error %08x\n", GetLastError()); + + SetLastError(0xdeadbeef); + raw_devices_count = 0; + count = GetRegisteredRawInputDevices(NULL, &raw_devices_count, sizeof(RAWINPUTDEVICE)); + ok(count == 0, "GetRegisteredRawInputDevices returned %u\n", count); + todo_wine + ok(raw_devices_count == 2, "Unexpected registered devices count: %u\n", raw_devices_count); + ok(GetLastError() == 0xdeadbeef, "GetRegisteredRawInputDevices unexpected error %08x\n", GetLastError()); + + SetLastError(0xdeadbeef); + raw_devices_count = 0; + count = GetRegisteredRawInputDevices(raw_devices, &raw_devices_count, sizeof(RAWINPUTDEVICE)); + if (broken(count == 0) /* depends on windows versions */) + win_skip("Ignoring GetRegisteredRawInputDevices success\n"); + else + { + todo_wine + ok(count == ~0U, "GetRegisteredRawInputDevices returned %u\n", count); + ok(raw_devices_count == 0, "Unexpected registered devices count: %u\n", raw_devices_count); + todo_wine + ok(GetLastError() == ERROR_INVALID_PARAMETER, "GetRegisteredRawInputDevices unexpected error %08x\n", GetLastError()); + } + + SetLastError(0xdeadbeef); + raw_devices_count = 1; + count = GetRegisteredRawInputDevices(raw_devices, &raw_devices_count, sizeof(RAWINPUTDEVICE)); + todo_wine + ok(count == ~0U, "GetRegisteredRawInputDevices returned %u\n", count); + todo_wine + ok(raw_devices_count == 2, "Unexpected registered devices count: %u\n", raw_devices_count); + todo_wine + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetRegisteredRawInputDevices unexpected error %08x\n", GetLastError()); + + SetLastError(0xdeadbeef); + memset(raw_devices, 0, sizeof(raw_devices)); + raw_devices_count = ARRAY_SIZE(raw_devices); + count = GetRegisteredRawInputDevices(raw_devices, &raw_devices_count, sizeof(RAWINPUTDEVICE)); + todo_wine + ok(count == 2, "GetRegisteredRawInputDevices returned %u\n", count); + ok(raw_devices_count == 2, "Unexpected registered devices count: %u\n", raw_devices_count); + ok(GetLastError() == 0xdeadbeef, "GetRegisteredRawInputDevices unexpected error %08x\n", GetLastError()); + todo_wine + ok(raw_devices[0].usUsagePage == 0x01, "Unexpected usage page: %x\n", raw_devices[0].usUsagePage); + todo_wine + ok(raw_devices[0].usUsage == 0x04, "Unexpected usage: %x\n", raw_devices[0].usUsage); + todo_wine + ok(raw_devices[1].usUsagePage == 0x01, "Unexpected usage page: %x\n", raw_devices[1].usUsagePage); + todo_wine + ok(raw_devices[1].usUsage == 0x05, "Unexpected usage: %x\n", raw_devices[1].usUsage); /* RIDEV_REMOVE requires hwndTarget == NULL */ raw_devices[0].dwFlags = RIDEV_REMOVE; raw_devices[0].hwndTarget = hwnd; + raw_devices[1].dwFlags = RIDEV_REMOVE; + raw_devices[1].hwndTarget = hwnd; SetLastError(0xdeadbeef); res = RegisterRawInputDevices(raw_devices, ARRAY_SIZE(raw_devices), sizeof(RAWINPUTDEVICE)); @@ -1802,6 +1869,7 @@ static void test_RegisterRawInputDevices(void) ok(GetLastError() == ERROR_INVALID_PARAMETER, "RegisterRawInputDevices returned %08x\n", GetLastError()); raw_devices[0].hwndTarget = 0; + raw_devices[1].hwndTarget = 0; SetLastError(0xdeadbeef); res = RegisterRawInputDevices(raw_devices, ARRAY_SIZE(raw_devices), sizeof(RAWINPUTDEVICE)); @@ -1812,6 +1880,8 @@ static void test_RegisterRawInputDevices(void) /* RIDEV_INPUTSINK requires hwndTarget != NULL */ raw_devices[0].dwFlags = RIDEV_INPUTSINK; raw_devices[0].hwndTarget = 0; + raw_devices[1].dwFlags = RIDEV_INPUTSINK; + raw_devices[1].hwndTarget = 0; SetLastError(0xdeadbeef); res = RegisterRawInputDevices(raw_devices, ARRAY_SIZE(raw_devices), sizeof(RAWINPUTDEVICE)); @@ -1819,6 +1889,7 @@ static void test_RegisterRawInputDevices(void) ok(GetLastError() == ERROR_INVALID_PARAMETER, "RegisterRawInputDevices returned %08x\n", GetLastError()); raw_devices[0].hwndTarget = hwnd; + raw_devices[1].hwndTarget = hwnd; SetLastError(0xdeadbeef); res = RegisterRawInputDevices(raw_devices, ARRAY_SIZE(raw_devices), sizeof(RAWINPUTDEVICE)); -- 2.27.0