ar_hittest_subscription_states_regular.https.html (2732B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="../resources/webxr_util.js"></script> 5 <script src="../resources/webxr_test_asserts.js"></script> 6 <script src="../resources/webxr_test_constants.js"></script> 7 <script src="../resources/webxr_test_constants_fake_world.js"></script> 8 9 <script> 10 11 const fakeDeviceInitParams = { 12 supportedModes: ["immersive-ar"], 13 views: VALID_VIEWS, 14 supportedFeatures: ALL_FEATURES, 15 }; 16 17 // Creates a test method that leverages regular hit test API (as opposed to hit 18 // test for transient input). 19 // |shouldSucceed| - true if the hit test request is expected to succeed, false otherwise 20 // |endSession| - true if the test case should call session.end() prior to requesting hit test 21 // |expectedError| - expected error name that should be returned in case shouldSucceed is false 22 const testFunctionGeneratorRegular = function(shouldSucceed, endSession, expectedError) { 23 const testFunction = async function(session, fakeDeviceController, t) { 24 const viewerRefSpace = await session.requestReferenceSpace('viewer'); 25 26 const hitTestOptionsInit = { 27 space: viewerRefSpace, 28 offsetRay: new XRRay(), 29 }; 30 31 if(endSession) { 32 session.end(); 33 } 34 35 try { 36 const hitTestSource = await session.requestHitTestSource(hitTestOptionsInit); 37 t.step(() => { 38 assert_true(shouldSucceed, 39 "`requestHitTestSource` succeeded when it was expected to fail"); 40 }); 41 } catch(error) { 42 t.step(() => { 43 assert_false(shouldSucceed, 44 "`requestHitTestSource` failed when it was expected to succeed, error: " + error); 45 assert_equals(error.name, expectedError, 46 "`requestHitTestSource` failed with unexpected error name"); 47 }); 48 }; 49 }; 50 51 return testFunction; 52 }; 53 54 xr_session_promise_test("Hit test subscription succeeds if the feature was requested", 55 testFunctionGeneratorRegular(/*shouldSucceed=*/true, /*endSession=*/false), 56 fakeDeviceInitParams, 57 'immersive-ar', { 'requiredFeatures': ['hit-test'] }); 58 59 xr_session_promise_test("Hit test subscription fails if the feature was not requested", 60 testFunctionGeneratorRegular(/*shouldSucceed=*/false, /*endSession=*/false, "NotSupportedError"), 61 fakeDeviceInitParams, 62 'immersive-ar', {}); 63 64 xr_session_promise_test("Hit test subscription fails if the feature was requested but the session already ended", 65 testFunctionGeneratorRegular(/*shouldSucceed=*/false, /*endSession=*/true, "InvalidStateError"), 66 fakeDeviceInitParams, 67 'immersive-ar', { 'requiredFeatures': ['hit-test'] }); 68 69 </script>