From f53d0538f14b4093861c66b7b00ff30dd6d3ea22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincas=20Mili=C5=ABnas?= Date: Mon, 11 Jul 2011 15:09:50 +0300 Subject: [PATCH 08/20] user32/tests: Added extended RegisterRawInputDevices tests (try 16) --- dlls/user32/tests/input.c | 191 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 191 insertions(+), 0 deletions(-) diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index 64b81b8..fbfd954 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -2187,6 +2187,196 @@ static void test_raw_input_device_flag_preconditions(void) "expected 0, got %u\n", count); } +static void test_extended_register_raw_input_devices(void) +{ + RAWINPUTDEVICE device, devices[2]; + BOOL ret; + UINT ret2, count; + + if (!pGetRegisteredRawInputDevices || !pRegisterRawInputDevices) + { + win_skip("GetRegisteredRawInputDevices and RegisterRawInputDevices are not available\n"); + return; + } + + /* Subscribe and unsubscribe from all devices in usage page */ + device.usUsagePage = HID_USAGE_PAGE_GENERIC; + device.usUsage = 0; + device.dwFlags = RIDEV_PAGEONLY; + device.hwndTarget = NULL; + ret = pRegisterRawInputDevices(&device, 1, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to subscribe to a usage page\n"); + + device.dwFlags = RIDEV_REMOVE | RIDEV_PAGEONLY; + ret = pRegisterRawInputDevices(&device, 1, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to unsubscribe to a usage page\n"); + + /* Assert that there are no devices registered */ + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 0, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 0, got %u\n", count); + + /* Should allow to exclude a device */ + device.usUsagePage = HID_USAGE_PAGE_GENERIC; + device.usUsage = HID_USAGE_GENERIC_MOUSE; + device.dwFlags = RIDEV_EXCLUDE; + device.hwndTarget = NULL; + ret = pRegisterRawInputDevices(&device, 1, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to exclude mouse raw input\n"); + ok(ret, "Given (&device{1,2,RIDEV_EXCLUDE,0}, 1, sizeof), " + "RegisterRawInputDevices should successfully exclude a device from input feed\n"); + + /* Assert that there is one registration */ + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 1, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 1, got %u\n", count); + + device.dwFlags = RIDEV_REMOVE; + ret = pRegisterRawInputDevices(&device, 1, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to unsubscribe\n"); + + /* Should override a device exclusion with an inclusion */ + devices[0].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[0].usUsage = HID_USAGE_GENERIC_MOUSE; + devices[0].dwFlags = RIDEV_EXCLUDE; + devices[0].hwndTarget = NULL; + devices[1].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[1].usUsage = HID_USAGE_GENERIC_MOUSE; + devices[1].dwFlags = 0; + devices[1].hwndTarget = NULL; + ret = pRegisterRawInputDevices(devices, 2, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to exclude and include mouse raw input " + "in the same call\n"); + + devices[1].dwFlags = RIDEV_REMOVE; + ret = pRegisterRawInputDevices(&devices[1], 1, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to unsubscribe\n"); + + /* Assert that there are no devices registered */ + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 0, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 0, got %u\n", count); + + /* Should register a usage page and a device from that usage page, + unsubscribing from them separately */ + devices[0].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[0].usUsage = 0; + devices[0].dwFlags = RIDEV_PAGEONLY; + devices[0].hwndTarget = NULL; + devices[1].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[1].usUsage = HID_USAGE_GENERIC_MOUSE; + devices[1].dwFlags = 0; + devices[1].hwndTarget = NULL; + ret = pRegisterRawInputDevices(devices, 2, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to subscribe\n"); + + devices[0].dwFlags = RIDEV_REMOVE | RIDEV_PAGEONLY; + ret = pRegisterRawInputDevices(&devices[0], 1, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to unsubscribe\n"); + + /* Assert that one device is registered */ + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 1, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 1, got %u\n", count); + + devices[1].dwFlags = RIDEV_REMOVE; + ret = pRegisterRawInputDevices(&devices[1], 1, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to unsubscribe\n"); + + /* Assert that there are no devices registered */ + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 0, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 0, got %u\n", count); + + /* Should include a usage page and exclude a device */ + devices[0].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[0].usUsage = 0; + devices[0].dwFlags = RIDEV_PAGEONLY; + devices[0].hwndTarget = NULL; + devices[1].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[1].usUsage = HID_USAGE_GENERIC_MOUSE; + devices[1].dwFlags = RIDEV_EXCLUDE; + devices[1].hwndTarget = NULL; + ret = pRegisterRawInputDevices(devices, 2, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to subscribe\n"); + + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 2, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 2, got %u\n", count); + + devices[0].dwFlags = RIDEV_REMOVE | RIDEV_PAGEONLY; + devices[1].dwFlags = RIDEV_REMOVE; + ret = pRegisterRawInputDevices(devices, 2, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to unsubscribe\n"); + + /* Assert that there are no devices registered */ + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 0, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 0, got %u\n", count); + + /* Should allow to subscribe and unsubscribe in the same call */ + devices[0].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[0].usUsage = HID_USAGE_GENERIC_MOUSE; + devices[0].dwFlags = 0; + devices[0].hwndTarget = NULL; + devices[1].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[1].usUsage = HID_USAGE_GENERIC_MOUSE; + devices[1].dwFlags = RIDEV_REMOVE; + devices[1].hwndTarget = NULL; + ret = pRegisterRawInputDevices(devices, 2, sizeof(RAWINPUTDEVICE)); + ok(ret, "RegisterRawInputDevices failed to subscribe and unsubscribe in the same call\n"); + + /* Assert that there are no devices registered */ + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 0, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 0, got %u\n", count); + + /* Test that RegisterRawInputDevices is atomic, + if one device fails to register, no changes are made */ + devices[0].usUsagePage = HID_USAGE_PAGE_GENERIC; + devices[0].usUsage = HID_USAGE_GENERIC_MOUSE; + devices[0].dwFlags = 0; + devices[0].hwndTarget = NULL; + devices[1].usUsagePage = 0; + devices[1].usUsage = 0; + devices[1].dwFlags = 0; + devices[1].hwndTarget = NULL; + ret = pRegisterRawInputDevices(devices, 2, sizeof(RAWINPUTDEVICE)); + todo_wine ok(!ret, "RegisterRawInputDevices should fail to register the devices\n"); + + /* Assert that there are no devices registered */ + count = 0xdeadbeef; + ret2 = pGetRegisteredRawInputDevices(NULL, &count, sizeof(RAWINPUTDEVICE)); + ok(ret2 == 0, "GetRegisteredRawInputDevices returned wrong value: " + "expected 0, got %u\n", ret2); + todo_wine ok(count == 0, "GetRegisteredRawInputDevices returned incorrect registration count: " + "expected 0, got %u\n", count); +} + START_TEST(input) { init_function_pointers(); @@ -2213,6 +2403,7 @@ START_TEST(input) test_basic_get_registered_raw_input_devices(); test_basic_register_raw_input_devices(); test_raw_input_device_flag_preconditions(); + test_extended_register_raw_input_devices(); if(pGetMouseMovePointsEx) test_GetMouseMovePointsEx(); -- 1.7.3.4