ar_hittest_subscription_states_transient.https.html (2659B)
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 hit test API for transient input. 18 // |shouldSucceed| - true if the hit test request is expected to succeed, false otherwise 19 // |endSession| - true if the test case should call session.end() prior to requesting hit test 20 // |expectedError| - expected error name that should be returned in case shouldSucceed is false 21 const testFunctionGeneratorTransient = function(shouldSucceed, endSession, expectedError) { 22 const testFunction = function(session, fakeDeviceController, t) { 23 const hitTestOptionsInit = { 24 profile: "generic-touchscreen", 25 offsetRay: new XRRay(), 26 }; 27 28 if(endSession) { 29 session.end(); 30 } 31 32 return session.requestHitTestSourceForTransientInput(hitTestOptionsInit) 33 .then((hitTestSource) => { 34 t.step(() => { 35 assert_true(shouldSucceed, 36 "`requestHitTestSourceForTransientInput` succeeded when it was expected to fail"); 37 }); 38 }).catch((error) => { 39 t.step(() => { 40 assert_false(shouldSucceed, 41 "`requestHitTestSourceForTransientInput` failed when it was expected to succeed, error: " + error); 42 assert_equals(error.name, expectedError, 43 "`requestHitTestSourceForTransientInput` failed with unexpected error name"); 44 }); 45 }); 46 }; 47 48 return testFunction; 49 }; 50 51 xr_session_promise_test("Transient hit test subscription succeeds if the feature was requested", 52 testFunctionGeneratorTransient(/*shouldSucceed=*/true, /*endSession=*/false), 53 fakeDeviceInitParams, 54 'immersive-ar', { 'requiredFeatures': ['hit-test'] }); 55 56 xr_session_promise_test("Transient hit test subscription fails if the feature was not requested", 57 testFunctionGeneratorTransient(/*shouldSucceed=*/false, /*endSession=*/false, "NotSupportedError"), 58 fakeDeviceInitParams, 59 'immersive-ar', {}); 60 61 xr_session_promise_test("Transient test subscription fails if the feature was requested but the session already ended", 62 testFunctionGeneratorTransient(/*shouldSucceed=*/false, /*endSession=*/true, "InvalidStateError"), 63 fakeDeviceInitParams, 64 'immersive-ar', { 'requiredFeatures': ['hit-test'] }); 65 66 </script>