blob: 7eb1c94a86ad94cc322f5f30464a6fef7e97bdf5 [file] [edit]
<head>
<script>
testRunner.dumpAsText();
testRunner.waitUntilDone();
function log(msg) {
document.getElementById("logger").innerHTML += msg + "<br>";
}
/**
* @param {Event} evt
* @param {string} type
*/
function logEvent(evt, type = evt.type) {
const { length } = navigator.getGamepads().filter((g) => g);
// don't bother printing ongamepadconnected & disconnected
if (!type.startsWith("on") || !type.includes("disconnected"))
logGamepad(evt.gamepad);
log(`${type ?? evt.type} event fired (${length}).`);
}
function logGamepad(gp) {
log("Name: " + gp.id);
log("Index: " + gp.index);
log("Mapping: " + gp.mapping);
log("Axes: " + gp.axes);
var buttonString = "";
for (button in gp.buttons) {
buttonString +=
gp.buttons[button].pressed +
"-" +
gp.buttons[button].value +
" ";
}
log("Buttons: " + buttonString);
}
function makeHandlerListenerPair(eventType) {
const pHandler = new Promise((resolve) => {
const attribute = `ongamepad${eventType}`;
const handler = (event) => {
logEvent(event, attribute);
window[attribute] = null;
resolve();
};
window[attribute] = handler;
});
const pListener = new Promise((resolve) => {
const handler = (event) => {
logEvent(event);
resolve();
};
window.addEventListener(`gamepad${eventType}`, handler, {
once: true,
});
});
return Promise.all([pListener, pHandler]);
}
async function runTest() {
log("Initial gamepads length: " + navigator.getGamepads().length);
log("Connecting 20 different gamepads");
// do one at a time...
for (var i = 0; i < 20; ++i) {
const p = makeHandlerListenerPair("connected");
testRunner.setMockGamepadDetails(i, i, "", i, i, false);
log("Connecting gamepad:");
testRunner.connectMockGamepad(i);
await p;
log(navigator.getGamepads().filter((x) => x));
}
log(
"Verifying there are 20 connected gamepads in the set of all gamepads"
);
var gamepads = navigator.getGamepads();
log(gamepads);
for (i in gamepads) {
logGamepad(gamepads[i]);
}
log(
"Disconnecting gamepads in reverse order, making sure gamepads array remains as expected"
);
for (var i = 19; i >= 0; --i) {
const p = makeHandlerListenerPair("disconnected");
log("Disconnecting gamepad:");
testRunner.disconnectMockGamepad(i);
await p;
log(navigator.getGamepads().filter((x) => x));
}
log("Checking non-zero'ed details for a gamepad");
testRunner.setMockGamepadDetails(
10,
"Awesome Joystick 5000",
"standard",
4,
16,
false
);
testRunner.setMockGamepadAxisValue(10, 0, 0.7);
testRunner.setMockGamepadAxisValue(10, 1, -0.9);
testRunner.setMockGamepadAxisValue(10, 2, 1.0);
testRunner.setMockGamepadAxisValue(10, 3, -1.0);
for (var i = 0; i < 16; ++i)
testRunner.setMockGamepadButtonValue(10, i, 1.0);
const p = makeHandlerListenerPair("connected");
testRunner.connectMockGamepad(10);
await p;
const p2 = makeHandlerListenerPair("disconnected");
log("Disconnecting final gamepad");
testRunner.disconnectMockGamepad(10);
await p2;
testRunner.notifyDone();
}
</script>
</head>
<body onload="runTest()">
<div id="logger"></div>
</body>