<!DOCTYPE html>
<body>
<script src="../resources/js-test.js"></script>
<script>
    description("Basic test for 'gamepadconnected' and 'gamepaddisconnected' events.");

    jsTestIsAsync = true;

    if (window.gamepadController)
    {
        function onConnected(event) {
            debug("Gamepad connected");
            shouldBe("event.__proto__", "GamepadEvent.prototype");
            shouldBe("event.__proto__.__proto__", "Event.prototype");
            shouldBeEqualToString("event.gamepad.id", "MockStick 3000");
            shouldBe("event.gamepad.buttons.length", "3");
            shouldBe("event.gamepad.axes.length", "3");
            shouldBe("event.gamepad.buttons[0].value", "1.0");
            shouldBeTrue("event.gamepad.buttons[0].pressed");
            shouldBe("event.gamepad.buttons[1].value", "0.0");
            shouldBeFalse("event.gamepad.buttons[1].pressed");
            shouldBe("event.gamepad.axes.length", "3");
            shouldBe("event.gamepad.buttons[2].value", "0.333333");
            shouldBeTrue("event.gamepad.buttons[2].pressed");
            shouldBe("event.gamepad.axes[0]", "0.5");
            shouldBe("event.gamepad.axes[1]", "-1.0");
            shouldBe("event.gamepad.axes[2]", "0.333333");
            // |axes| and |buttons| are FrozenArrays, changing them has no
            // effect.
            axes = event.gamepad.axes;
            axes[0] = 42;
            shouldBe("axes[0]", "0.5");
            buttons = event.gamepad.buttons;
            buttons.foo = "bar";
            shouldBeFalse("buttons.hasOwnProperty('foo')");
            gamepadController.disconnect(0);
        }

        function onDisconnected(event) {
            debug("Gamepad disconnected");
            shouldBe("event.__proto__", "GamepadEvent.prototype");
            shouldBe("event.__proto__.__proto__", "Event.prototype");
            shouldBeEqualToString("event.gamepad.id", "MockStick 3000");
            shouldBe("event.gamepad.buttons.length", "3");
            shouldBe("event.gamepad.axes.length", "3");
            finishJSTest();
        }

        window.addEventListener('gamepadconnected', onConnected);
        window.addEventListener('gamepaddisconnected', onDisconnected);

        gamepadController.connect(0);
        gamepadController.setId(0, "MockStick 3000");
        gamepadController.setButtonCount(0, 3);
        gamepadController.setAxisCount(0, 3);
        gamepadController.setButtonData(0, 0, 1);
        gamepadController.setButtonData(0, 1, 0);
        gamepadController.setButtonData(0, 2, 0.333333);
        gamepadController.setAxisData(0, 0, .5);
        gamepadController.setAxisData(0, 1, -1.0);
        gamepadController.setAxisData(0, 2, 0.333333);
        gamepadController.dispatchConnected(0);
    }
    else
    {
        testFailed("no gamepadController available.");
    }
</script>
</body>
