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

    let makeSpaceTest = (space_type) => {
      return (session, fakeDeviceController, t) => {
        return session.requestReferenceSpace(space_type).then( (referenceSpace) => {
          t.step(() => {
            assert_true(referenceSpace instanceof XRReferenceSpace,
              "reference space is not correct type.");
          });
        });
      };
    };

    let makeInvalidSpaceTest = (space_type) => {
      return (session, fakeDeviceController, t) => {
          return  promise_rejects_dom(t, "NotSupportedError",
                                  session.requestReferenceSpace(space_type),
                                  "requestReferenceSpace('" + space_type + "')");
      };
    };

    let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;

    // Test that reference spaces matching default features work.
    xr_session_promise_test(
        "Non-immersive session supports viewer space by default",
        makeSpaceTest('viewer'), fakeDeviceInitParams, 'inline', {});
    xr_session_promise_test(
        "Immersive session supports viewer space by default",
        makeSpaceTest('viewer'), fakeDeviceInitParams, 'immersive-vr', {});
    xr_session_promise_test(
        "Immersive session supports local space by default",
        makeSpaceTest('local'), fakeDeviceInitParams, 'immersive-vr', {});

    // Test that session-appropriate non-default reference spaces work when requested
    xr_session_promise_test(
        "Non-immersive session supports local space when required",
        makeSpaceTest('local'), fakeDeviceInitParams, 'inline',
        {requiredFeatures: ['local']});
    xr_session_promise_test(
        "Non-immersive session supports local space when optional",
        makeSpaceTest('local'), fakeDeviceInitParams, 'inline',
        {optionalFeatures: ['local']});
    xr_session_promise_test(
        "Non-immersive session supports local-floor space when required",
        makeSpaceTest('local-floor'), fakeDeviceInitParams, 'inline',
        {requiredFeatures: ['local-floor']});
    xr_session_promise_test(
        "Immersive session supports local-floor space when required",
        makeSpaceTest('local-floor'), fakeDeviceInitParams, 'immersive-vr',
        {requiredFeatures: ['local-floor']});
    xr_session_promise_test(
        "Immersive session supports local-floor space when optional",
        makeSpaceTest('local-floor'), fakeDeviceInitParams, 'immersive-vr',
        {optionalFeatures: ['local-floor']});

    // Test that inline space can't request 'bounded-floor' or 'unbounded'
    xr_session_promise_test(
        "Non-immersive session rejects bounded-floor space even when requested",
        makeInvalidSpaceTest('bounded-floor'), fakeDeviceInitParams, 'inline',
        {optionalFeatures: ['bounded-floor']});
    xr_session_promise_test(
       "Non-immersive session rejects unbounded space even when requested",
        makeInvalidSpaceTest('unbounded'), fakeDeviceInitParams, 'inline',
        {optionalFeatures: ['unbounded']});

    // Test that reference spaces that aren't default features are rejected
    // when not requested as a feature.
    xr_session_promise_test(
       "Non-immersive session rejects local space if not requested",
        makeInvalidSpaceTest('local'), fakeDeviceInitParams, 'inline', {});
    xr_session_promise_test(
       "Immersive session rejects local-floor space if not requested",
        makeInvalidSpaceTest('local-floor'), fakeDeviceInitParams, 'immersive-vr', {});
  </script>
</body>
