tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>