<!DOCTYPE html>
<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>

<script>
let testName = "XRSession attributes meet [SameObject] requirement";

let testFunction = function(session, fakeDeviceController, t) {
  return new Promise((resolve) => {
    let input_source = fakeDeviceController.simulateInputSourceConnection({
      handedness: "right",
      targetRayMode: "tracked-pointer",
      pointerOrigin: VALID_POINTER_TRANSFORM,
      gripOrigin: VALID_GRIP_TRANSFORM,
      profiles: ["foo", "bar"]
    });

    requestSkipAnimationFrame(session, (time, xrFrame) => {
      let renderState = session.renderState;
      let sources = session.inputSources;

      t.step(() => {
        assert_not_equals(renderState, null, "renderState must not be null.");
        assert_not_equals(sources, null, "inputSources must not be null.");

        // Make sure [SameObject] attributes actually have the same object
        // returned each time they are accessed.
        assert_equals(renderState, session.renderState,
          "XRSession.renderState returns the same object.");
        assert_equals(sources, session.inputSources,
          "XRSession.inputSources returns the same object.");
      });

      session.requestAnimationFrame((time, xrFrame) => {
        t.step(() => {
          // Make sure the attributes still return the same object on the next
          // frame.
          assert_equals(renderState, session.renderState,
            "XRSession.renderState returns the same object.");
          assert_equals(sources, session.inputSources,
            "XRSession.inputSources returns the same object.");
        });

        // Even though changing handedness on the input source should cause that
        // source to be re-created, it should not cause the entire
        // XRInputSourceArray object on XRSession to be re-created.
        input_source.setHandedness("left");
        session.requestAnimationFrame((time, xrFrame) => {
          t.step(() => {
            assert_equals(renderState, session.renderState,
              "XRSession.renderState returns the same object.");
            assert_equals(sources, session.inputSources,
              "XRSession.inputSources returns the same object.");
          });
          resolve();
        });
      });
    });
  });
};

xr_session_promise_test(
  testName, testFunction, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr');
</script>
