diff options
Diffstat (limited to 'testing/web-platform/tests/webxr/xrView_match.https.html')
-rw-r--r-- | testing/web-platform/tests/webxr/xrView_match.https.html | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webxr/xrView_match.https.html b/testing/web-platform/tests/webxr/xrView_match.https.html new file mode 100644 index 0000000000..2ef430734d --- /dev/null +++ b/testing/web-platform/tests/webxr/xrView_match.https.html @@ -0,0 +1,87 @@ +<!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_constants.js"></script> +<script src="resources/webxr_test_asserts.js"></script> + +<script> + +let testName = "XRFrame contains the expected views"; + +const fakeViews = [{ + eye:"left", + projectionMatrix: VALID_PROJECTION_MATRIX, + viewOffset: LEFT_OFFSET, + resolution: VALID_RESOLUTION + }, { + eye:"right", + projectionMatrix: VALID_PROJECTION_MATRIX, + viewOffset: RIGHT_OFFSET, + resolution: VALID_RESOLUTION + }, +]; + +let fakeDeviceInitParams = { + supportsImmersive: true, + supportedModes: ["inline", "immersive-vr"], + views: fakeViews, + viewerOrigin: IDENTITY_TRANSFORM, + supportedFeatures: ALL_FEATURES +}; + +let testFunction = function(session, fakeDeviceController, t) { + return session.requestReferenceSpace('viewer').then(function(viewerSpace) { + return session.requestReferenceSpace('local').then((referenceSpace) => new Promise((resolve) => { + function onFrame(time, xrFrame) { + let pose = xrFrame.getViewerPose(referenceSpace); + assert_not_equals(pose, null); + assert_not_equals(pose.views, null); + assert_equals(pose.views.length, 2); + + { + let pose2 = xrFrame.getPose(viewerSpace, referenceSpace); + assert_not_equals(pose2, null); + + // This pose should have the same transform as the viewer pose, but without + // the views array. It should be an XRPose instead of the XRViewerPose derived + // class. + assert_true(pose2 instanceof XRPose); + assert_false(pose2 instanceof XRViewerPose); + assert_not_equals(pose2.transform, null); + assert_not_equals(pose2.transform.matrix, null); + assert_matrix_approx_equals(pose.transform.matrix, pose2.transform.matrix); + } + + // Ensure that two views are provided. + let leftView = pose.views[0]; + let rightView = pose.views[1]; + + // Ensure that the views are the right type. + assert_true(leftView instanceof XRView); + assert_true(rightView instanceof XRView); + + // Ensure that they have the expected eye enums. + assert_equals(leftView.eye, "left"); + assert_equals(rightView.eye, "right"); + + // Ensure they have the expected projection matrices. + assert_not_equals(leftView.projectionMatrix, null); + assert_not_equals(rightView.projectionMatrix, null); + + assert_matrix_approx_equals(leftView.projectionMatrix, VALID_PROJECTION_MATRIX); + assert_matrix_approx_equals(rightView.projectionMatrix, VALID_PROJECTION_MATRIX); + + // Finished test. + resolve(); + } + + session.requestAnimationFrame(onFrame); + })); + }); +}; + +xr_session_promise_test( + testName, testFunction, fakeDeviceInitParams, 'immersive-vr'); + +</script> |