<head>
<script>

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function log(msg)
{
    document.getElementById("logger").innerHTML += msg + "<br>";
}

function finishTest()
{
    if (testRunner)
        testRunner.notifyDone();
}

var rafCount = 0;
var increasingTimestampsSeen = 0;
var timestamp = 0;
var gamepad2Timestamp = -1;

function rafCallback()
{
    var gamepad = navigator.getGamepads()[0];
    var gamepad2 = navigator.getGamepads()[1];

    if (gamepad2Timestamp == -1)
        gamepad2Timestamp = gamepad2.timestamp;

    if (gamepad2Timestamp != gamepad2.timestamp) {
        log("Timestamp of gamepad 2 should never change throughout this test, but it did!");
        finishTest();
    }

    if (gamepad.timestamp < timestamp) {
        log("Timestamp on gamepad is " + gamepad.timestamp + " which is less than " + timestamp);
        finishTest();
    }

    if (gamepad.timestamp > timestamp)
        ++increasingTimestampsSeen;

    if (increasingTimestampsSeen == 10) {
        log("Increasing timestamp values seen for 10 RAF cycles");
        finishTest();
    }

    if (++rafCount == 120) {
        log("Went 120 RAF cycles without seeing 10 increasing timestamp values... yikes!");
        log("Number of actual timestamp increases seen: " + increasingTimestampsSeen);
        finishTest();
    }

    timestamp = gamepad.timestamp;

    if (gamepad.buttons[0] == 1.0)
        testRunner.setMockGamepadButtonValue(0, 0, 0.0);
    else
        testRunner.setMockGamepadButtonValue(0, 0, 1.0);
    
    requestAnimationFrame(rafCallback);
}

function handleGamepadConnect()
{
    requestAnimationFrame(rafCallback);
}

function runTest() {
    addEventListener("gamepadconnected", handleGamepadConnect);

    testRunner.setMockGamepadDetails(0, "Test Joystick", 2, 2);
    testRunner.setMockGamepadAxisValue(0, 0, 0.7);
    testRunner.setMockGamepadAxisValue(0, 1, -1.0);
    testRunner.setMockGamepadButtonValue(0, 0, 1.0);
    testRunner.setMockGamepadButtonValue(0, 1, 1.0);
    testRunner.connectMockGamepad(0);
    testRunner.setMockGamepadDetails(1, "Test Joystick 2", 2, 2);
    testRunner.setMockGamepadAxisValue(1, 0, 0.7);
    testRunner.setMockGamepadAxisValue(1, 1, -1.0);
    testRunner.setMockGamepadButtonValue(1, 0, 1.0);
    testRunner.setMockGamepadButtonValue(1, 1, 1.0);
    testRunner.connectMockGamepad(1);
}

</script>
</head>
<body onload="runTest();">
<div id="logger"></div>
</body>
