<!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>
let testName = "Test the XRHand API";

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: VALID_HAND_JOINTS,
  });

  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, 25);
        
        let wristJointSpace = hand.get("wrist");
        assert_equals(wristJointSpace.jointName, "wrist");

        var count = 0;
        for (const [jointName, jointSpace] of hand) {
            assert_equals(jointSpace.jointName, jointName);
            count++;
        }
        assert_equals(count, 25);

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

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

</script>
