<!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 src="resources/webxr_test_asserts.js"></script>

<script>

let testName = "XRFrame contains the expected views";

const fakeViews = [{
        eye:"left",
        projectionMatrix: VALID_PROJECTION_MATRIX,
        viewOffset: LEFT_OFFSET,
        resolution: VALID_RESOLUTION
    }, {
        eye:"right",
        projectionMatrix: VALID_PROJECTION_MATRIX,
        viewOffset: RIGHT_OFFSET,
        resolution: VALID_RESOLUTION
    },
];

let fakeDeviceInitParams = {
    supportsImmersive: true,
    supportedModes: ["inline", "immersive-vr"],
    views: fakeViews,
    viewerOrigin: IDENTITY_TRANSFORM,
    supportedFeatures: ALL_FEATURES
};

let testFunction = function(session, fakeDeviceController, t) {
  return session.requestReferenceSpace('viewer').then(function(viewerSpace) {
    return session.requestReferenceSpace('local').then((referenceSpace) => new Promise((resolve) => {
      function onFrame(time, xrFrame) {
        let pose = xrFrame.getViewerPose(referenceSpace);
        assert_not_equals(pose, null);
        assert_not_equals(pose.views, null);
        assert_equals(pose.views.length, 2);

        {
          let pose2 = xrFrame.getPose(viewerSpace, referenceSpace);
          assert_not_equals(pose2, null);

          // This pose should have the same transform as the viewer pose, but without
          // the views array. It should be an XRPose instead of the XRViewerPose derived
          // class.
          assert_true(pose2 instanceof XRPose);
          assert_false(pose2 instanceof XRViewerPose);
          assert_not_equals(pose2.transform, null);
          assert_not_equals(pose2.transform.matrix, null);
          assert_matrix_approx_equals(pose.transform.matrix, pose2.transform.matrix);
        }

        // Ensure that two views are provided.
        let leftView = pose.views[0];
        let rightView = pose.views[1];

        // Ensure that the views are the right type.
        assert_true(leftView instanceof XRView);
        assert_true(rightView instanceof XRView);

        // Ensure that they have the expected eye enums.
        assert_equals(leftView.eye, "left");
        assert_equals(rightView.eye, "right");

        // Ensure they have the expected projection matrices.
        assert_not_equals(leftView.projectionMatrix, null);
        assert_not_equals(rightView.projectionMatrix, null);

        assert_matrix_approx_equals(leftView.projectionMatrix, VALID_PROJECTION_MATRIX);
        assert_matrix_approx_equals(rightView.projectionMatrix, VALID_PROJECTION_MATRIX);

        // Finished test.
        resolve();
      }

      session.requestAnimationFrame(onFrame);
    }));
  });
};

xr_session_promise_test(
  testName, testFunction, fakeDeviceInitParams, 'immersive-vr');

</script>
