<!DOCTYPE html>
<html>
  <head>
    <title>VRController DisplayId</title>
    <meta name="timeout" content="long"/>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="VRSimulationDriver.js"></script>
    <script src="runVRTest.js"></script>
  </head>
  <body>
    <script>
      "use strict";
      var vrDisplay;
      var controllerCount = 0;

      function addController() {
        promise_test((test) => {
          return VRSimulationDriver.AttachVRController().then((controller) => {
            controller.newButtonEvent(0, true);
          });
        }, "Finish to add VRController.");
      }

      function listenControllerEvents() {
        async_test(function(t) {
          window.addEventListener("gamepadbuttondown", function(e) {
              assert_equals(e.gamepad.displayId, vrDisplay.displayId, "gamepad.displayId should be equal to vrDisplay.");
              assert_equals(e.gamepad.id, "Puppet Gamepad", "gamepad.id must be equal to 'Puppet Gamepad'.");
              ++controllerCount;
              if (controllerCount == 2) {
                t.done();
              }
          });
        }, "Finish to verify VRController.displayId.");
      }

      function startTest() {
        promise_test((test) => {
          listenControllerEvents();
          return VRSimulationDriver.AttachWebVRDisplay().then(() => {
            return navigator.getVRDisplays().then((displays) => {
              vrDisplay = displays[0];
              assert_equals(displays.length, 1, "displays.length must be one after attach.");
              assert_equals(vrDisplay.displayName, "Puppet HMD", "display.displayName must be equal to 'Puppet HMD'.");
              addController();
              addController();
            });
          });
        }, "Finish to add VRDisplay.");
      }

      runVRTest(startTest);
    </script>
  </body>
</html>
