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

<script>
let testName = "Test XRFrame.fillJointRadii where the hand has one missing joint pose";

let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE_WITH_HAND_TRACKING;

let testFunction = function(session, fakeDeviceController, t, sessionObjects) {

  let input_source = fakeDeviceController.simulateInputSourceConnection({
    handedness: "none",
    targetRayMode: "tracked-pointer",
    pointerOrigin: VALID_POINTER_TRANSFORM,
    profiles: [],
    handJoints: HAND_JOINTS_WITH_ONE_INVALID,
  });

  return session.requestReferenceSpace('local')
    .then((referenceSpace) => new Promise((resolve) => {

      function onFrame(time, xrFrame) {
        assert_not_equals(session.inputSources.length, 0);
        let hand = session.inputSources[0].hand
        assert_not_equals(hand, null);
        assert_equals(hand.size, JOINT_COUNT);

        let radii = new Float32Array(JOINT_COUNT);
        let allValid = xrFrame.fillJointRadii(hand.values(), radii);
        assert_false(allValid);
        for (radius of radii) {
            assert_equals(radius, NaN);
        }

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

xr_session_promise_test(
  testName, testFunction, fakeDeviceInitParams, 'immersive-vr', { optionalFeatures: ["hand-tracking"] });

</script>
