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

  <script>

    let testName = "XRFrame getViewerPose has emulatedPosition set properly.";

    const poseTransform = {
        position: [1, 1, 1],
        orientation: [0.5, 0.5, 0.5, 0.5]
    };

    let testFunction = function(session, fakeDeviceController, t) {
      let debug = xr_debug.bind(this, 'testFunction');
      return session.requestReferenceSpace('local')
        .then((referenceSpace) => new Promise((resolve, reject) => {
          debug('refSpace promise');
          function CheckPositionNotEmulated(time, vrFrame){
            debug('rAF 1: checkPositionNotEmulated');
            t.step(() => {
              let pose = vrFrame.getViewerPose(referenceSpace);
              assert_not_equals(pose, null);
              assert_equals(pose.emulatedPosition, false);
              fakeDeviceController.setViewerOrigin(poseTransform, true);
            });

            session.requestAnimationFrame(CheckPositionEmulated);
          }

          function CheckPositionEmulated(time, vrFrame) {
            debug('rAF 2: checkPositionEmulated');
            t.step(() => {
              let pose = vrFrame.getViewerPose(referenceSpace);
              assert_not_equals(pose, null);
              assert_equals(pose.emulatedPosition, true);
            });

            // Finished.
            debug('resolve');
            resolve();
          }

          requestSkipAnimationFrame(session, CheckPositionNotEmulated);
        }));
    };

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

  </script>
</body>
