blob: 69ee48bf8a25421005c3fce51453b3e5b5d9b482 [file] [log] [blame]
<!DOCTYPE html>
<body>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/gamepad-helpers.js"></script>
<script>
function checkVibrationActuatorOnDisconnect() {
return new Promise(resolve => {
window.addEventListener('gamepaddisconnected', (e) => {
// The vibration actuator member should be null for a disconnected
// gamepad.
assert_equals(e.gamepad.vibrationActuator, null);
resolve();
}, { once: true });
});
}
promise_test(async (t) => {
// Connect a gamepad with no vibration actuator.
let connectPromise = ongamepadconnected(t);
gamepadController.connect(0);
gamepadController.setId(0, "ZEROAXIS");
gamepadController.setDualRumbleVibrationActuator(0, false);
gamepadController.dispatchConnected(0);
await connectPromise;
let gamepad = navigator.getGamepads()[0];
assert_equals(gamepad.vibrationActuator, null);
}, "null vibration actuator is null");
promise_test(async (t) => {
// Connect a gamepad with a dual-rumble vibration actuator.
let connectPromise = ongamepadconnected(t);
gamepadController.connect(0);
gamepadController.setId(0, "DullShark Rumble");
gamepadController.setDualRumbleVibrationActuator(0, true);
gamepadController.dispatchConnected(0);
await connectPromise;
let gamepad = navigator.getGamepads()[0];
assert_equals(gamepad.vibrationActuator.__proto__,
GamepadHapticActuator.prototype);
assert_equals(gamepad.vibrationActuator.type.__proto__,
String.prototype);
assert_equals(gamepad.vibrationActuator.type, 'dual-rumble');
assert_equals(gamepad.vibrationActuator.playEffect.__proto__,
Function.prototype);
assert_equals(gamepad.vibrationActuator.reset.__proto__,
Function.prototype);
}, "validate gamepad haptic actuator API");
promise_test(async (t) => {
// Connect a gamepad with a dual-rumble vibration actuator.
let connectPromise = ongamepadconnected(t);
gamepadController.connect(0);
gamepadController.setId(0, "Checkbox Elite");
gamepadController.setDualRumbleVibrationActuator(0, true);
gamepadController.dispatchConnected(0);
await connectPromise;
let gamepad = navigator.getGamepads()[0];
assert_equals(gamepad.vibrationActuator, gamepad.vibrationActuator);
}, "vibration actuator is same object");
promise_test(async (t) => {
// Connect a gamepad with a dual-rumble vibration actuator.
let connectPromise = ongamepadconnected(t);
gamepadController.connect(0);
gamepadController.setId(0, "Ipswich Pro");
gamepadController.setButtonCount(0, 1);
gamepadController.setDualRumbleVibrationActuator(0, true);
gamepadController.dispatchConnected(0);
await connectPromise;
let gamepadBefore = navigator.getGamepads()[0];
// Press button 0.
gamepadController.setButtonData(0, 0, 1);
let gamepadAfter = navigator.getGamepads()[0];
assert_equals(gamepadAfter.buttons[0].value, 1.0);
assert_equals(gamepadBefore.vibrationActuator,
gamepadAfter.vibrationActuator);
}, "vibration actuator is still the same object after a button press");
promise_test(async (t) => {
// Connect a gamepad with a dual-rumble vibration actuator.
let connectPromise = ongamepadconnected(t);
gamepadController.connect(0);
gamepadController.setId(0, "Nintendto Experiment");
gamepadController.setDualRumbleVibrationActuator(0, true);
gamepadController.dispatchConnected(0);
await connectPromise;
let actuatorBefore = navigator.getGamepads()[0].vibrationActuator;
// Disconnect the gamepad and connect a different one, also with vibration.
connectPromise = ongamepadconnected(t);
gamepadController.disconnect(0);
gamepadController.connect(0);
gamepadController.setId(0, "Nintendto Implement");
gamepadController.setDualRumbleVibrationActuator(0, true);
gamepadController.dispatchConnected(0);
await connectPromise;
let gamepadAfter = navigator.getGamepads()[0];
let actuatorAfter = gamepadAfter.vibrationActuator;
assert_equals(gamepadAfter.id, "Nintendto Implement");
assert_not_equals(actuatorBefore, actuatorAfter);
}, "vibration actuator is different for different gamepad");
promise_test(async (t) => {
// Connect a gamepad with a dual-rumble vibration actuator.
let connectPromise = ongamepadconnected(t);
gamepadController.connect(0);
gamepadController.setId(0, "Nintendto Ship");
gamepadController.setDualRumbleVibrationActuator(0, true);
gamepadController.dispatchConnected(0);
await connectPromise;
// Disconnect the gamepad.
let disconnectPromise = checkVibrationActuatorOnDisconnect();
gamepadController.disconnect(0);
await disconnectPromise;
}, "vibration actuator is null for disconnected gamepad");
</script>
</body>