File: ar_hittest_subscription_states_regular.https.html

package info (click to toggle)
firefox-esr 78.15.0esr-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,301,156 kB
  • sloc: cpp: 5,665,905; javascript: 4,798,386; ansic: 2,878,233; python: 977,004; asm: 270,347; xml: 181,456; java: 111,756; sh: 72,926; makefile: 21,819; perl: 13,380; cs: 4,725; yacc: 4,565; objc: 3,026; pascal: 1,787; lex: 1,720; ada: 1,681; exp: 505; php: 436; lisp: 260; awk: 152; ruby: 103; csh: 80; sed: 53; sql: 45
file content (70 lines) | stat: -rw-r--r-- 2,696 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/webxr_util.js"></script>
<script src="../resources/webxr_test_asserts.js"></script>
<script src="../resources/webxr_test_constants.js"></script>
<script src="../resources/webxr_test_constants_fake_world.js"></script>
<canvas />

<script>

const fakeDeviceInitParams = {
  supportedModes: ["immersive-ar"],
  views: VALID_VIEWS,
  supportedFeatures: ALL_FEATURES,
};

// Creates a test method that leverages regular hit test API (as opposed to hit
// test for transient input).
// |shouldSucceed| - true if the hit test request is expected to succeed, false otherwise
// |endSession| - true if the test case should call session.end() prior to requesting hit test
// |expectedError| - expected error name that should be returned in case shouldSucceed is false
const testFunctionGeneratorRegular = function(shouldSucceed, endSession, expectedError) {
  const testFunction = function(session, fakeDeviceController, t) {
    session.requestReferenceSpace('viewer').then((viewerRefSpace) => {

      const hitTestOptionsInit = {
        space: viewerRefSpace,
        offsetRay: new XRRay(),
      };

      if(endSession) {
        session.end();
      }

      return session.requestHitTestSource(hitTestOptionsInit).then((hitTestSource) => {
        t.step(() => {
          assert_true(shouldSucceed,
            "`requestHitTestSource` succeeded when it was expected to fail");
        });
      }).catch((error) => {
        t.step(() => {
          assert_false(shouldSucceed,
            "`requestHitTestSource` failed when it was expected to succeed, error: " + error);
          assert_equals(error.name, expectedError,
            "`requestHitTestSource` failed with unexpected error name");
        });
      });
    });
  };

  return testFunction;
};

xr_session_promise_test("Hit test subscription succeeds if the feature was requested",
  testFunctionGeneratorRegular(/*shouldSucceed=*/true, /*endSession=*/false),
  fakeDeviceInitParams,
  'immersive-ar', { 'requiredFeatures': ['hit-test'] });

xr_session_promise_test("Hit test subscription fails if the feature was not requested",
  testFunctionGeneratorRegular(/*shouldSucceed=*/false, /*endSession=*/false, "NotSupportedError"),
  fakeDeviceInitParams,
  'immersive-ar', {});

xr_session_promise_test("Hit test subscription fails if the feature was requested but the session already ended",
  testFunctionGeneratorRegular(/*shouldSucceed=*/false, /*endSession=*/true, "InvalidStateError"),
  fakeDeviceInitParams,
  'immersive-ar', { 'requiredFeatures': ['hit-test'] });

</script>