mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 02:41:22 +00:00
[XINPUT1_3_WINETEST] Sync with Wine Staging 2.2. CORE-12823
svn path=/trunk/; revision=73988
This commit is contained in:
parent
f730ef2eb5
commit
2aff90f702
1 changed files with 89 additions and 27 deletions
|
@ -32,29 +32,57 @@ static DWORD (WINAPI *pXInputGetKeystroke)(DWORD, DWORD, PXINPUT_KEYSTROKE);
|
|||
static DWORD (WINAPI *pXInputGetDSoundAudioDeviceGuids)(DWORD, GUID*, GUID*);
|
||||
static DWORD (WINAPI *pXInputGetBatteryInformation)(DWORD, BYTE, XINPUT_BATTERY_INFORMATION*);
|
||||
|
||||
static void dump_gamepad(XINPUT_GAMEPAD *data)
|
||||
{
|
||||
trace("-- Gamepad Variables --\n");
|
||||
trace("Gamepad.wButtons: %#x\n", data->wButtons);
|
||||
trace("Gamepad.bLeftTrigger: %d\n", data->bLeftTrigger);
|
||||
trace("Gamepad.bRightTrigger: %d\n", data->bRightTrigger);
|
||||
trace("Gamepad.sThumbLX: %d\n", data->sThumbLX);
|
||||
trace("Gamepad.sThumbLY: %d\n", data->sThumbLY);
|
||||
trace("Gamepad.sThumbRX: %d\n", data->sThumbRX);
|
||||
trace("Gamepad.sThumbRY: %d\n\n", data->sThumbRY);
|
||||
}
|
||||
|
||||
static void test_set_state(void)
|
||||
{
|
||||
XINPUT_VIBRATION vibrator;
|
||||
DWORD controllerNum;
|
||||
DWORD result;
|
||||
|
||||
for(controllerNum=0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
for(controllerNum = 0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
{
|
||||
ZeroMemory(&vibrator, sizeof(XINPUT_VIBRATION));
|
||||
|
||||
vibrator.wLeftMotorSpeed = 32767;
|
||||
vibrator.wRightMotorSpeed = 32767;
|
||||
result = pXInputSetState(controllerNum, &vibrator);
|
||||
if (result == ERROR_DEVICE_NOT_CONNECTED) continue;
|
||||
|
||||
Sleep(250);
|
||||
vibrator.wLeftMotorSpeed = 0;
|
||||
vibrator.wRightMotorSpeed = 0;
|
||||
result = pXInputSetState(controllerNum, &vibrator);
|
||||
ok(result == ERROR_SUCCESS, "XInputSetState failed with (%d)\n", result);
|
||||
|
||||
/* Disabling XInput here, queueing a vibration and then re-enabling XInput
|
||||
* is used to prove that vibrations are auto enabled when resuming XInput.
|
||||
* If XInputEnable(1) is removed below the vibration will never play. */
|
||||
if (pXInputEnable) pXInputEnable(0);
|
||||
|
||||
Sleep(250);
|
||||
vibrator.wLeftMotorSpeed = 65535;
|
||||
vibrator.wRightMotorSpeed = 65535;
|
||||
result = pXInputSetState(controllerNum, &vibrator);
|
||||
ok(result == ERROR_SUCCESS, "XInputSetState failed with (%d)\n", result);
|
||||
|
||||
if (pXInputEnable) pXInputEnable(1);
|
||||
Sleep(250);
|
||||
|
||||
vibrator.wLeftMotorSpeed = 0;
|
||||
vibrator.wRightMotorSpeed = 0;
|
||||
result = pXInputSetState(controllerNum, &vibrator);
|
||||
ok(result == ERROR_SUCCESS || result == ERROR_DEVICE_NOT_CONNECTED, "XInputSetState failed with (%d)\n", result);
|
||||
|
||||
if (pXInputEnable) pXInputEnable(0);
|
||||
|
||||
vibrator.wLeftMotorSpeed = 65535;
|
||||
vibrator.wRightMotorSpeed = 65535;
|
||||
result = pXInputSetState(controllerNum, &vibrator);
|
||||
ok(result == ERROR_SUCCESS || result == ERROR_DEVICE_NOT_CONNECTED, "XInputSetState failed with (%d)\n", result);
|
||||
|
||||
if (pXInputEnable) pXInputEnable(1);
|
||||
ok(result == ERROR_SUCCESS, "XInputSetState failed with (%d)\n", result);
|
||||
}
|
||||
|
||||
result = pXInputSetState(XUSER_MAX_COUNT+1, &vibrator);
|
||||
|
@ -68,8 +96,7 @@ static void test_get_state(void)
|
|||
XINPUT_STATE state;
|
||||
XINPUT_STATE_EX state_ex;
|
||||
} xinput;
|
||||
DWORD controllerNum, i;
|
||||
DWORD result;
|
||||
DWORD controllerNum, i, result, good = XUSER_MAX_COUNT;
|
||||
|
||||
for (i = 0; i < (pXInputGetStateEx ? 2 : 1); i++)
|
||||
{
|
||||
|
@ -92,18 +119,14 @@ static void test_get_state(void)
|
|||
|
||||
trace("-- Results for controller %d --\n", controllerNum);
|
||||
if (i == 0)
|
||||
{
|
||||
good = controllerNum;
|
||||
trace("XInputGetState: %d\n", result);
|
||||
}
|
||||
else
|
||||
trace("XInputGetStateEx: %d\n", result);
|
||||
trace("State->dwPacketNumber: %d\n", xinput.state.dwPacketNumber);
|
||||
trace("Gamepad Variables --\n");
|
||||
trace("Gamepad.wButtons: %#x\n", xinput.state.Gamepad.wButtons);
|
||||
trace("Gamepad.bLeftTrigger: 0x%08x\n", xinput.state.Gamepad.bLeftTrigger);
|
||||
trace("Gamepad.bRightTrigger: 0x%08x\n", xinput.state.Gamepad.bRightTrigger);
|
||||
trace("Gamepad.sThumbLX: %d\n", xinput.state.Gamepad.sThumbLX);
|
||||
trace("Gamepad.sThumbLY: %d\n", xinput.state.Gamepad.sThumbLY);
|
||||
trace("Gamepad.sThumbRX: %d\n", xinput.state.Gamepad.sThumbRX);
|
||||
trace("Gamepad.sThumbRY: %d\n", xinput.state.Gamepad.sThumbRY);
|
||||
dump_gamepad(&xinput.state.Gamepad);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,6 +143,28 @@ static void test_get_state(void)
|
|||
result = pXInputGetStateEx(XUSER_MAX_COUNT+1, &xinput.state_ex);
|
||||
ok(result == ERROR_BAD_ARGUMENTS, "XInputGetState returned (%d)\n", result);
|
||||
}
|
||||
|
||||
if (winetest_interactive && good < XUSER_MAX_COUNT)
|
||||
{
|
||||
DWORD now = GetTickCount(), packet = 0;
|
||||
XINPUT_GAMEPAD *game = &xinput.state.Gamepad;
|
||||
|
||||
trace("You have 20 seconds to test the joystick freely\n");
|
||||
do
|
||||
{
|
||||
Sleep(100);
|
||||
pXInputGetState(good, &xinput.state);
|
||||
if (xinput.state.dwPacketNumber == packet)
|
||||
continue;
|
||||
|
||||
packet = xinput.state.dwPacketNumber;
|
||||
trace("Buttons 0x%04X Triggers %3d/%3d LT %6d/%6d RT %6d/%6d\n",
|
||||
game->wButtons, game->bLeftTrigger, game->bRightTrigger,
|
||||
game->sThumbLX, game->sThumbLY, game->sThumbRX, game->sThumbRY);
|
||||
}
|
||||
while(GetTickCount() - now < 20000);
|
||||
trace("Test over...\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void test_get_keystroke(void)
|
||||
|
@ -128,7 +173,7 @@ static void test_get_keystroke(void)
|
|||
DWORD controllerNum;
|
||||
DWORD result;
|
||||
|
||||
for(controllerNum=0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
for(controllerNum = 0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
{
|
||||
ZeroMemory(&keystroke, sizeof(XINPUT_KEYSTROKE));
|
||||
|
||||
|
@ -153,7 +198,7 @@ static void test_get_capabilities(void)
|
|||
DWORD controllerNum;
|
||||
DWORD result;
|
||||
|
||||
for(controllerNum=0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
for(controllerNum = 0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
{
|
||||
ZeroMemory(&capabilities, sizeof(XINPUT_CAPABILITIES));
|
||||
|
||||
|
@ -163,7 +208,11 @@ static void test_get_capabilities(void)
|
|||
if (ERROR_DEVICE_NOT_CONNECTED == result)
|
||||
{
|
||||
skip("Controller %d is not connected\n", controllerNum);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Important to show that the results changed between 1.3 and 1.4 XInput version */
|
||||
dump_gamepad(&capabilities.Gamepad);
|
||||
}
|
||||
|
||||
ZeroMemory(&capabilities, sizeof(XINPUT_CAPABILITIES));
|
||||
|
@ -175,18 +224,31 @@ static void test_get_dsoundaudiodevice(void)
|
|||
{
|
||||
DWORD controllerNum;
|
||||
DWORD result;
|
||||
GUID soundRender;
|
||||
GUID soundCapture;
|
||||
GUID soundRender, soundCapture;
|
||||
GUID testGuid = {0xFFFFFFFF, 0xFFFF, 0xFFFF, {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}};
|
||||
GUID emptyGuid = {0x0, 0x0, 0x0, {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}};
|
||||
|
||||
for(controllerNum=0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
for(controllerNum = 0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
{
|
||||
soundRender = soundCapture = testGuid;
|
||||
result = pXInputGetDSoundAudioDeviceGuids(controllerNum, &soundRender, &soundCapture);
|
||||
ok(result == ERROR_SUCCESS || result == ERROR_DEVICE_NOT_CONNECTED, "XInputGetDSoundAudioDeviceGuids failed with (%d)\n", result);
|
||||
|
||||
if (ERROR_DEVICE_NOT_CONNECTED == result)
|
||||
{
|
||||
skip("Controller %d is not connected\n", controllerNum);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!IsEqualGUID(&soundRender, &emptyGuid))
|
||||
ok(!IsEqualGUID(&soundRender, &testGuid), "Broken GUID returned for sound render device\n");
|
||||
else
|
||||
trace("Headset phone not attached\n");
|
||||
|
||||
if (!IsEqualGUID(&soundCapture, &emptyGuid))
|
||||
ok(!IsEqualGUID(&soundCapture, &testGuid), "Broken GUID returned for sound capture device\n");
|
||||
else
|
||||
trace("Headset microphone not attached\n");
|
||||
}
|
||||
|
||||
result = pXInputGetDSoundAudioDeviceGuids(XUSER_MAX_COUNT+1, &soundRender, &soundCapture);
|
||||
|
@ -199,7 +261,7 @@ static void test_get_batteryinformation(void)
|
|||
DWORD result;
|
||||
XINPUT_BATTERY_INFORMATION batteryInfo;
|
||||
|
||||
for(controllerNum=0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
for(controllerNum = 0; controllerNum < XUSER_MAX_COUNT; controllerNum++)
|
||||
{
|
||||
ZeroMemory(&batteryInfo, sizeof(XINPUT_BATTERY_INFORMATION));
|
||||
|
||||
|
|
Loading…
Reference in a new issue