<!DOCTYPE html>
<body>
  <script src=/resources/testharness.js></script>
  <script src=/resources/testharnessreport.js></script>
  <script src="resources/webxr_util.js"></script>
  <script src="resources/webxr_test_constants.js"></script>
  <canvas></canvas>

  <script>
    const immersivetestName = "end event fires when immersive session ends";
    const nonimmersiveTestName = "end event fires when non-immersive session ends";
    let watcherDone = new Event("watcherdone");
    const fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;

    let testFunction = function(session, testDeviceController, t) {
      let eventWatcher = new EventWatcher(t, session, ["end", "watcherdone"]);
      let eventPromise = eventWatcher.wait_for(["end", "watcherdone"]);

      function onSessionEnd(event) {
        t.step( () => {
          assert_equals(event.session, session);

          let eventSession = event.session;
          assert_equals(eventSession, event.session,
            "XRSessionEvent.session returns the same object.");

          session.dispatchEvent(watcherDone);
        });
      }
      session.addEventListener("end", onSessionEnd, false);
      session.end();

      return eventPromise;
    };

    xr_session_promise_test(immersivetestName, testFunction,
      fakeDeviceInitParams, 'immersive-vr');
    xr_session_promise_test(nonimmersiveTestName, testFunction,
      fakeDeviceInitParams, 'inline');
  </script>
</body>
