<!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 testName = "RequestAnimationFrame resolves with good data";

    const fakeDeviceInitOptions = TRACKED_IMMERSIVE_DEVICE;

    let testSession;

    function checkView(view) {
      assert_not_equals(view, null);
      assert_not_equals(view.transform, null);

      let inv_view_transform = view.transform.inverse;
      assert_not_equals(inv_view_transform, null);
      assert_not_equals(inv_view_transform.matrix, null);
      assert_equals(inv_view_transform.matrix.length, 16);
    }

    let testFunction = function(session, testDeviceController) {
      testSession = session;
      return session.requestReferenceSpace('local')
        .then((referenceSpace) => new Promise((resolve) => {

          function onFrame(time, xrFrame) {
            assert_true(xrFrame instanceof XRFrame);

            let viewerPose = xrFrame.getViewerPose(referenceSpace);

            assert_not_equals(viewerPose, null);
            for(let i = 0; i < IDENTITY_MATRIX.length; i++) {
              assert_equals(viewerPose.transform.matrix[i], IDENTITY_MATRIX[i]);
            }

            assert_not_equals(viewerPose.views, null);
            assert_equals(viewerPose.views.length, 2);
            checkView(viewerPose.views[0]);
            checkView(viewerPose.views[1]);

            // Test does not complete until the returned promise resolves.
            resolve();
          }

          testSession.requestAnimationFrame(onFrame);
        })
      );
    }

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