83 lines
2.2 KiB
HTML
83 lines
2.2 KiB
HTML
<!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>
|
|
|
|
let testName = "XRInputSources properly communicate their handedness";
|
|
|
|
let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
|
|
|
|
let testFunction =
|
|
(session, fakeDeviceController, t) => new Promise((resolve) => {
|
|
let input_source = fakeDeviceController.simulateInputSourceConnection({
|
|
handedness: "none",
|
|
targetRayMode: "tracked-pointer",
|
|
pointerOrigin: VALID_POINTER_TRANSFORM,
|
|
profiles: []
|
|
});
|
|
|
|
function CheckNone(time, xrFrame) {
|
|
let source = session.inputSources[0];
|
|
|
|
t.step( () => {
|
|
assert_not_equals(source, null);
|
|
// Handedness should be "none" by default.
|
|
assert_equals(source.handedness, "none");
|
|
});
|
|
|
|
input_source.setHandedness("right");
|
|
|
|
session.requestAnimationFrame(CheckRight);
|
|
}
|
|
|
|
function CheckRight(time, xrFrame) {
|
|
let source = session.inputSources[0];
|
|
|
|
t.step( () => {
|
|
assert_not_equals(source, null);
|
|
// Handedness was set to "right", make sure it propegates.
|
|
assert_equals(source.handedness, "right");
|
|
});
|
|
|
|
input_source.setHandedness("left");
|
|
|
|
session.requestAnimationFrame(CheckLeft);
|
|
}
|
|
|
|
function CheckLeft(time, xrFrame) {
|
|
let source = session.inputSources[0];
|
|
|
|
t.step( () => {
|
|
assert_not_equals(source, null);
|
|
// Handedness was set to "left", make sure it propegates.
|
|
assert_equals(source.handedness, "left");
|
|
});
|
|
|
|
input_source.setHandedness("none");
|
|
|
|
session.requestAnimationFrame(CheckNoneAgain);
|
|
}
|
|
|
|
function CheckNoneAgain(time, xrFrame) {
|
|
let source = session.inputSources[0];
|
|
|
|
t.step( () => {
|
|
assert_not_equals(source, null);
|
|
// Handedness was set to "none" again, make sure it propegates.
|
|
assert_equals(source.handedness, "none");
|
|
});
|
|
|
|
resolve();
|
|
}
|
|
|
|
// Handedness only updates during an XR frame.
|
|
requestSkipAnimationFrame(session, CheckNone);
|
|
});
|
|
|
|
xr_session_promise_test(
|
|
testName, testFunction, fakeDeviceInitParams, 'immersive-vr');
|
|
|
|
</script>
|