| <!doctype html> | 
 | <title>Manual Gamepad IDL tests</title> | 
 | <link rel="help" href="https://w3c.github.io/gamepad/"> | 
 | <script src="/resources/testharness.js"></script> | 
 | <script src="/resources/testharnessreport.js"></script> | 
 | <script src="/resources/WebIDLParser.js"></script> | 
 | <script src="/resources/idlharness.js"></script> | 
 | <p id="instructions">This test requires a gamepad. Connect one and press any button to start the test.</p> | 
 | <script> | 
 | 'use strict'; | 
 |  | 
 | idl_test( | 
 |  ['gamepad'], | 
 |  ['dom', 'html'], | 
 |  (idl_array, t) => { | 
 |  idl_array.add_objects({ | 
 |  Gamepad: ['gamepad'], | 
 |  GamepadButton: ['gamepadButton'], | 
 |  GamepadEvent: ['event'], | 
 |  Navigator: ['navigator'] | 
 |  }); | 
 |  | 
 |  const eventWatcher = new EventWatcher(t, window, "gamepadconnected"); | 
 |  const gamepadConnected = eventWatcher.wait_for("gamepadconnected") | 
 |  .then(e => { | 
 |  self.event = e; | 
 |  self.gamepad = e.gamepad; | 
 |  self.gamepadButton = e.gamepad.buttons[0]; | 
 |  }); | 
 |  | 
 |  const timeout = new Promise((_, reject) => { | 
 |  t.step_timeout(() => { reject('Timed out waiting for gamepad'); }, 5000); | 
 |  }); | 
 |  return Promise.race([gamepadConnected, timeout]); | 
 |  } | 
 | ); | 
 | </script> |