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