summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webxr/xrRigidTransform_constructor.https.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /testing/web-platform/tests/webxr/xrRigidTransform_constructor.https.html
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/webxr/xrRigidTransform_constructor.https.html')
-rw-r--r--testing/web-platform/tests/webxr/xrRigidTransform_constructor.https.html148
1 files changed, 148 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webxr/xrRigidTransform_constructor.https.html b/testing/web-platform/tests/webxr/xrRigidTransform_constructor.https.html
new file mode 100644
index 0000000000..01e069c80b
--- /dev/null
+++ b/testing/web-platform/tests/webxr/xrRigidTransform_constructor.https.html
@@ -0,0 +1,148 @@
+<!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 = "XRRigidTransform constructor works";
+let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
+
+let testFunction =
+ (session, fakeDeviceController, t) => new Promise((resolve, reject) => {
+ let coordDict = function(coords) {
+ let tempDict = {
+ x : coords[0],
+ y : coords[1],
+ z : coords[2]
+ }
+
+ if (coords.length >= 4) {
+ tempDict["w"] = coords[3];
+ }
+
+ return tempDict;
+ };
+
+ let createDOMPoint = function(coords) {
+ return DOMPoint.fromPoint(coordDict(coords));
+ };
+
+ let createDOMPointReadOnly = function(coords) {
+ return DOMPointReadOnly.fromPoint(coordDict(coords));
+ };
+
+ let quaternionLength = function(point) {
+ return Math.sqrt(
+ (point.x * point.x) +
+ (point.y * point.y) +
+ (point.z * point.z) +
+ (point.w * point.w));
+ };
+
+ let checkDOMPoint = function(point, x, y, z, w, desc) {
+ t.step(() => {
+ assert_approx_equals(point.x, x, FLOAT_EPSILON, `${desc}: x value`);
+ assert_approx_equals(point.y, y, FLOAT_EPSILON, `${desc}: y value`);
+ assert_approx_equals(point.z, z, FLOAT_EPSILON, `${desc}: z value`);
+ assert_approx_equals(point.w, w, FLOAT_EPSILON, `${desc}: w value`);
+ });
+ };
+
+ let checkTransform = function(transformObj, desc) {
+ t.step(() => {
+ assert_not_equals(transformObj, null, `${desc}: exists`);
+ assert_not_equals(transformObj.position, null, `${desc}: position exists`);
+ assert_not_equals(transformObj.orientation, null, `${desc}: orientation exists`);
+ assert_not_equals(transformObj.matrix, null, `${desc}: matrix exists`);
+ assert_equals(transformObj.matrix.length, 16, `${desc}: matrix of correct length`);
+ });
+ };
+
+ // test creating transform with specified position and orientation
+ // make sure that orientation was normalized to have length = 1.0
+ let transform = new XRRigidTransform(
+ createDOMPoint([1.0, 2.0, 3.0]),
+ createDOMPoint([1.1, 2.1, 3.1, 1.0]));
+ checkTransform(transform, "Arbitrary transform");
+ checkDOMPoint(transform.position, 1.0, 2.0, 3.0, 1.0, "Arbitrary transform position");
+ assert_approx_equals(quaternionLength(transform.orientation), 1.0, FLOAT_EPSILON,
+ "Arbitrary transform is normalized");
+
+ // test creating identity transform
+ let identity = new XRRigidTransform();
+ checkTransform(identity, "Identity transform");
+ checkDOMPoint(identity.position, 0.0, 0.0, 0.0, 1.0, "Identity transform position");
+ checkDOMPoint(identity.orientation, 0.0, 0.0, 0.0, 1.0, "Identity transform orientation");
+
+ // create transform with only position specified
+ transform = new XRRigidTransform(createDOMPoint([1.0, 2.0, 3.0]));
+ checkTransform(transform, "Position-only");
+
+ // create transform with only orientation specified
+ transform = new XRRigidTransform(undefined, createDOMPoint([1.1, 2.1, 3.1, 1.0]));
+ checkTransform(transform, "orientation-only");
+
+ // create transform with DOMPointReadOnly
+ transform = new XRRigidTransform(
+ createDOMPointReadOnly([1.0, 2.0, 3.0]),
+ createDOMPointReadOnly([1.1, 2.1, 3.1, 1.0]));
+ checkTransform(transform, "Created with DOMPointReadOnly");
+
+ // create transform with dictionary
+ transform = new XRRigidTransform(
+ coordDict([1.0, 2.0, 3.0]),
+ coordDict([1.1, 2.1, 3.1, 1.0]));
+ checkTransform(transform, "Created with dict");
+
+ assert_throws_js(TypeError, () => new XRRigidTransform(
+ coordDict([1.0, 2.0, 3.0, 0.5]),
+ coordDict([1.1, 2.1, 3.1, 1.0])
+ ), "Constructor should throw TypeError for non-1 position w values");
+
+assert_throws_js(TypeError, () => new XRRigidTransform(
+ coordDict([NaN, 2.0, 3.0, 1.0]),
+ coordDict([1.1, 2.1, 3.1, 1.0])
+), "Constructor should throw TypeError if position values contain NaN");
+
+assert_throws_js(TypeError, () => new XRRigidTransform(
+ coordDict([1.0, Infinity, 3.0, 1.0]),
+ coordDict([1.1, 2.1, 3.1, 1.0])
+), "Constructor should throw TypeError if position values contain Infinity");
+
+assert_throws_js(TypeError, () => new XRRigidTransform(
+ coordDict([1.0, 2.0, -Infinity, 1.0]),
+ coordDict([1.1, 2.1, 3.1, 1.0])
+), "Constructor should throw TypeError if position values contain -Infinity");
+
+assert_throws_js(TypeError, () => new XRRigidTransform(
+ coordDict([1.0, 2.0, 3.0, 1.0]),
+ coordDict([NaN, 2.1, 3.1, 1.0])
+), "Constructor should throw TypeError if orientation values contain NaN");
+
+assert_throws_js(TypeError, () => new XRRigidTransform(
+ coordDict([1.0, 2.0, 3.0, 1.0]),
+ coordDict([1.1, Infinity, 3.1, 1.0])
+), "Constructor should throw TypeError if orientation values contain Infinity");
+
+assert_throws_js(TypeError, () => new XRRigidTransform(
+ coordDict([1.0, 2.0, 3.0, 1.0]),
+ coordDict([1.1, 2.1, -Infinity, 1.0])
+), "Constructor should throw TypeError if orientation values contain -Infinity");
+
+ assert_throws_dom("InvalidStateError", () => new XRRigidTransform(
+ coordDict([1.0, 2.0, 3.0, 1.0]),
+ coordDict([0, 0, 0, 0])
+ ), "Constructor should throw InvalidStateError for non-normalizeable orientation values");
+
+assert_throws_dom("InvalidStateError", () => new XRRigidTransform(
+ coordDict([1.0, 2.0, 3.0, 1.0]),
+ coordDict([-1.7976931348623157e+308, 0, 0, 0])
+), "Constructor should throw InvalidStateError for non-normalizeable orientation values");
+ resolve();
+});
+
+xr_session_promise_test(testName, testFunction, fakeDeviceInitParams,
+ 'immersive-vr');
+
+</script>