xrSession_requestReferenceSpace_features.https.html (3769B)
1 <!DOCTYPE html> 2 <body> 3 <script src=/resources/testharness.js></script> 4 <script src=/resources/testharnessreport.js></script> 5 <script src="resources/webxr_util.js"></script> 6 <script src="resources/webxr_test_constants.js"></script> 7 <script> 8 9 let makeSpaceTest = (space_type) => { 10 return (session, fakeDeviceController, t) => { 11 return session.requestReferenceSpace(space_type).then( (referenceSpace) => { 12 t.step(() => { 13 assert_true(referenceSpace instanceof XRReferenceSpace, 14 "reference space is not correct type."); 15 }); 16 }); 17 }; 18 }; 19 20 let makeInvalidSpaceTest = (space_type) => { 21 return (session, fakeDeviceController, t) => { 22 return promise_rejects_dom(t, "NotSupportedError", 23 session.requestReferenceSpace(space_type), 24 "requestReferenceSpace('" + space_type + "')"); 25 }; 26 }; 27 28 let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; 29 30 // Test that reference spaces matching default features work. 31 xr_session_promise_test( 32 "Non-immersive session supports viewer space by default", 33 makeSpaceTest('viewer'), fakeDeviceInitParams, 'inline', {}); 34 xr_session_promise_test( 35 "Immersive session supports viewer space by default", 36 makeSpaceTest('viewer'), fakeDeviceInitParams, 'immersive-vr', {}); 37 xr_session_promise_test( 38 "Immersive session supports local space by default", 39 makeSpaceTest('local'), fakeDeviceInitParams, 'immersive-vr', {}); 40 41 // Test that session-appropriate non-default reference spaces work when requested 42 xr_session_promise_test( 43 "Non-immersive session supports local space when required", 44 makeSpaceTest('local'), fakeDeviceInitParams, 'inline', 45 {requiredFeatures: ['local']}); 46 xr_session_promise_test( 47 "Non-immersive session supports local space when optional", 48 makeSpaceTest('local'), fakeDeviceInitParams, 'inline', 49 {optionalFeatures: ['local']}); 50 xr_session_promise_test( 51 "Non-immersive session supports local-floor space when required", 52 makeSpaceTest('local-floor'), fakeDeviceInitParams, 'inline', 53 {requiredFeatures: ['local-floor']}); 54 xr_session_promise_test( 55 "Immersive session supports local-floor space when required", 56 makeSpaceTest('local-floor'), fakeDeviceInitParams, 'immersive-vr', 57 {requiredFeatures: ['local-floor']}); 58 xr_session_promise_test( 59 "Immersive session supports local-floor space when optional", 60 makeSpaceTest('local-floor'), fakeDeviceInitParams, 'immersive-vr', 61 {optionalFeatures: ['local-floor']}); 62 63 // Test that inline space can't request 'bounded-floor' or 'unbounded' 64 xr_session_promise_test( 65 "Non-immersive session rejects bounded-floor space even when requested", 66 makeInvalidSpaceTest('bounded-floor'), fakeDeviceInitParams, 'inline', 67 {optionalFeatures: ['bounded-floor']}); 68 xr_session_promise_test( 69 "Non-immersive session rejects unbounded space even when requested", 70 makeInvalidSpaceTest('unbounded'), fakeDeviceInitParams, 'inline', 71 {optionalFeatures: ['unbounded']}); 72 73 // Test that reference spaces that aren't default features are rejected 74 // when not requested as a feature. 75 xr_session_promise_test( 76 "Non-immersive session rejects local space if not requested", 77 makeInvalidSpaceTest('local'), fakeDeviceInitParams, 'inline', {}); 78 xr_session_promise_test( 79 "Immersive session rejects local-floor space if not requested", 80 makeInvalidSpaceTest('local-floor'), fakeDeviceInitParams, 'immersive-vr', {}); 81 </script> 82 </body>