<!doctype html>
<html>
<head>
<title>Manual Gamepad timestamp tests</title>
<link rel="help" href="https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#widl-Gamepad-timestamp">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
setup({explicit_timeout: true});

function set_instructions(text) {
  document.getElementById("instructions").textContent = text;
}

var index = -1;
var lastTimestamp = performance.now();
var id = -1;
addEventListener("gamepadconnected", function (e) {
  assert_equals(index, -1, "Too many connected events?");
  index = e.gamepad.index;
  assert_greater_than(e.gamepad.timestamp, lastTimestamp, "timestamp should be increasing");
  lastTimestamp = e.gamepad.timestamp;
  set_instructions("Found a gamepad. Now release the button you pressed and press it again.");
  // There may not be a button pressed here, so handle it cleanly either way.
  if (e.gamepad.buttons.some(function (b) { return b.pressed; })) {
    id = setInterval(waitForButtonRelease, 15);
  } else {
    id = setInterval(waitForButtonPress, 15);
  }
});

function waitForButtonRelease() {
  var gamepad = navigator.getGamepads()[index];
  assert_true(!!gamepad);
  if (gamepad.buttons.every(function (b) { return !b.pressed; })) {
    assert_greater_than(gamepad.timestamp, lastTimestamp, "timestamp should be increasing");
    lastTimestamp = gamepad.timestamp;
    clearInterval(id);
    id = setInterval(waitForButtonPress, 15);
  }
}

function waitForButtonPress() {
  var gamepad = navigator.getGamepads()[index];
  assert_true(!!gamepad);
  if (gamepad.buttons.some(function (b) { return b.pressed; })) {
    assert_greater_than(gamepad.timestamp, lastTimestamp, "timestamp should be increasing");
    clearInterval(id);
    done();
  }
}

</script>
</head>
<body>
<p id="instructions">This test requires a gamepad. Connect one and press any button to start the test.</p>
</body>
</html>
