Skip to content

Commit

Permalink
Sync 'css/geometry' tests from WPT upstream
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=265211
rdar://problem/118893090

Reviewed by Tim Nguyen.

Upstream commit: web-platform-tests/wpt@13d894d

* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix2DInit-validate-fixup-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix2DInit-validate-fixup.html:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMRectList-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMRectList.html:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness-expected.txt: Removed.
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.html: Removed.
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.worker-expected.txt: Removed.
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.worker.js: Removed.
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/support/dommatrix-test-util.js:
(checkMatrix):
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/support/interfaces.js: Removed.
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/support/w3c-import.log:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/w3c-import.log:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.any.worker.html:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.any.worker-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.any.js:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.any.html:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.any-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix-invert-preserves-2d.html:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix-invert-preserves-2d-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix-invert-non-invertible.html:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix-invert-non-invertible-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix-invert-invertible.html:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/DOMMatrix-invert-invertible-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/geometry/idlharness.worker.html: Removed.

Canonical link: https://commits.webkit.org/279043@main
  • Loading branch information
Ahmad Saleem committed May 21, 2024
1 parent 63e956c commit 71878cc
Show file tree
Hide file tree
Showing 21 changed files with 247 additions and 189 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Test DOMMatrix.inverse()/invertSelf() for invertible matrices


PASS identity
PASS translate
PASS translate3d
PASS scale
PASS scale3d
PASS complex

Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.fxtf.org/geometry-1/#DOMMatrix">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/dommatrix-test-util.js"></script>
<p>Test DOMMatrix.inverse()/invertSelf() for invertible matrices</p>
<script>
test(function() {
var m = new DOMMatrix();
assert_true(m.isIdentity);
var m1 = m.inverse();
assert_true(m1.isIdentity);
// Use checkMatrix() instead of checkDOMMatrix() because checkMatrix() has
// a default epsilon = Number.MIN_VALUE which can at least pass
// assert_approx_equal(0, -0, epsilon).
checkMatrix(m, m1);
m.invertSelf();
checkMatrix(m, m1);
}, "identity");

test(function() {
var m = new DOMMatrix().translate(10, -20.5);
var m1 = m.inverse();
checkMatrix(m1, new DOMMatrix().translate(-10, 20.5));
// Check with 'new DOMMatrix()' instead of identity() because the latter is
// a 3d identity matrix.
checkMatrix(m1.multiply(m), new DOMMatrix());
m.invertSelf();
checkMatrix(m, m1);
}, "translate");

test(function() {
var m = new DOMMatrix().translate(10, -20.5, 30.5);
var m1 = m.inverse();
checkMatrix(m1, new DOMMatrix().translate(-10, 20.5, -30.5));
checkMatrix(m1.multiply(m), identity());
m.invertSelf();
checkMatrix(m, m1);
}, "translate3d");

test(function() {
var m = new DOMMatrix().scale(4, -0.5);
var m1 = m.inverse();
checkMatrix(m1, new DOMMatrix().scale(0.25, -2.0));
checkMatrix(m1.multiply(m), new DOMMatrix());
m.invertSelf();
checkMatrix(m, m1);
}, "scale");

test(function() {
var m = new DOMMatrix().scale(4, -0.5, 2);
var m1 = m.inverse();
checkMatrix(m1, new DOMMatrix().scale(0.25, -2.0, 0.5));
checkMatrix(m1.multiply(m), identity());
m.invertSelf();
checkMatrix(m, m1);
}, "scale3d");

test(function() {
var m = new DOMMatrix().rotateAxisAngle(0, 0, 1, -30)
.scale(10, -0.5, 2.5)
.rotateAxisAngle(0, 1, 0, 10)
.translate(10, -20.5, 30.5)
.rotateAxisAngle(1, 0, 0, 20);
var expected = new DOMMatrix().rotateAxisAngle(1, 0, 0, -20)
.translate(-10, 20.5, -30.5)
.rotateAxisAngle(0, 1, 0, -10)
.scale(0.1, -2.0, 0.4)
.rotateAxisAngle(0, 0, 1, 30);
var m1 = m.inverse();
var epsilon = 1e-6;
checkMatrix(m1, expected, {epsilon});
m.invertSelf();
checkMatrix(m, expected, {epsilon});
}, "complex");
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Test DOMMatrix.inverse()/invertSelf() for non-invertible matrix


PASS invertSelf()
PASS inverse()

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<link rel="help" href="https://drafts.fxtf.org/geometry-1/#DOMMatrix">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<p>Test DOMMatrix.inverse()/invertSelf() for non-invertible matrix</p>
<script>
function checkResult(m) {
assert_false(m.is2D, 'is2D');
assert_false(m.isIdentity, 'isIdentity');
assert_true(isNaN(m.m11), 'm11 isNaN');
assert_true(isNaN(m.m12), 'm12 isNaN');
assert_true(isNaN(m.m13), 'm13 isNaN');
assert_true(isNaN(m.m14), 'm14 isNaN');
assert_true(isNaN(m.m21), 'm21 isNaN');
assert_true(isNaN(m.m22), 'm22 isNaN');
assert_true(isNaN(m.m23), 'm23 isNaN');
assert_true(isNaN(m.m24), 'm24 isNaN');
assert_true(isNaN(m.m31), 'm31 isNaN');
assert_true(isNaN(m.m32), 'm32 isNaN');
assert_true(isNaN(m.m33), 'm33 isNaN');
assert_true(isNaN(m.m34), 'm34 isNaN');
assert_true(isNaN(m.m41), 'm41 isNaN');
assert_true(isNaN(m.m42), 'm42 isNaN');
assert_true(isNaN(m.m43), 'm43 isNaN');
assert_true(isNaN(m.m44), 'm44 isNaN');

var f32 = m.toFloat32Array();
assert_equals(f32.length, 16, 'toFloat32Array().length');
for (var i = 0; i < 16; i++)
assert_true(isNaN(f32[i]), 'toFloat32Array()[' + i + '] isNaN');

var f64 = m.toFloat64Array();
assert_equals(f64.length, 16, 'toFloat64Array().length');
for (var i = 0; i < 16; i++)
assert_true(isNaN(f64[i]), 'toFloat64()[' + i + '] isNaN');
}

test(function() {
var m = new DOMMatrix();
m.a = 0;
m.invertSelf();
checkResult(m);
},"invertSelf()");

test(function() {
var m = new DOMMatrix();
m.a = 0;
checkResult(m.inverse());
},"inverse()");
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

PASS scale
PASS rotate

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<!DOCTYPE html>
<title>Test DOMMatrix.inverse()/invertSelf() keep is2D status</title>
<link rel="help" href="https://drafts.fxtf.org/geometry-1/#DOMMatrix">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
function check2D(m) {
assert_true(m.is2D);
// assert_equals() distinguish 0 and -0, so use '== 0' instead.
assert_true(m.m13 == 0);
assert_true(m.m14 == 0);
assert_true(m.m23 == 0);
assert_true(m.m24 == 0);
assert_true(m.m31 == 0);
assert_true(m.m32 == 0);
assert_equals(m.m33, 1);
assert_true(m.m34 == 0);
assert_true(m.m43 == 0);
assert_equals(m.m44, 1);
}

test(function() {
for (var s = 0.1; s < 20; s += 0.1) {
m = new DOMMatrix().scale(s, s);
check2D(m);
check2D(m.inverse());
m.invertSelf();
check2D(m);
}
}, "scale");

test(function() {
for (var r = 0; r < 180; r += 2) {
m = new DOMMatrix().rotate(r);
check2D(m);
check2D(m.inverse());
m.invertSelf();
check2D(m);
}
}, "rotate");
</script>

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -74,20 +74,6 @@
}, `addPath (Sanity check without second parameter)`);

[
// Input dict that would throw if ignore3D was false
[{m13: 1, is2D: true}, matrix2D({})],
[{m14: 1, is2D: true}, matrix2D({})],
[{m23: 1, is2D: true}, matrix2D({})],
[{m24: 1, is2D: true}, matrix2D({})],
[{m31: 1, is2D: true}, matrix2D({})],
[{m32: 1, is2D: true}, matrix2D({})],
[{m33: 0, is2D: true}, matrix2D({})],
[{m33: -0, is2D: true}, matrix2D({})],
[{m33: -1, is2D: true}, matrix2D({})],
[{m34: 1, is2D: true}, matrix2D({})],
[{m43: 1, is2D: true}, matrix2D({})],
[{m44: 0, is2D: true}, matrix2D({})],

// Input dict that are 2D
[{}, matrix2D({})],
[{is2D: undefined}, matrix2D({})],
Expand Down Expand Up @@ -142,32 +128,6 @@
[{m43: -0, is2D: true}, matrix2D({})],
[{m44: 1, is2D: true}, matrix2D({})],
[{is2D: true}, matrix2D({})],

// Input dict that are 3D, but 3D members are ignored
[{m13: 1, is2D: false}, matrix2D({})],
[{m14: 1, is2D: false}, matrix2D({})],
[{m23: 1, is2D: false}, matrix2D({})],
[{m24: 1, is2D: false}, matrix2D({})],
[{m31: 1, is2D: false}, matrix2D({})],
[{m32: 1, is2D: false}, matrix2D({})],
[{m33: 0, is2D: false}, matrix2D({})],
[{m33: -0, is2D: false}, matrix2D({})],
[{m33: -1, is2D: false}, matrix2D({})],
[{m34: 1, is2D: false}, matrix2D({})],
[{m43: 1, is2D: false}, matrix2D({})],
[{m44: 0, is2D: false}, matrix2D({})],
[{m13: 1}, matrix2D({})],
[{m14: 1}, matrix2D({})],
[{m23: 1}, matrix2D({})],
[{m24: 1}, matrix2D({})],
[{m31: 1}, matrix2D({})],
[{m32: 1}, matrix2D({})],
[{m33: 0}, matrix2D({})],
[{m34: 1}, matrix2D({})],
[{m43: 1}, matrix2D({})],
[{m44: 0}, matrix2D({})],
[{is2D: false}, matrix2D({})],
[{is2D: null}, matrix2D({})],
].forEach(([dict, expected]) => {
test(() => {
ctx.resetTransform();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
x

PASS DOMRectList is not [NoInterfaceObject]
PASS DOMRectList is exposed
PASS DOMRectList is not [LegacyArrayClass]
PASS DOMRectList length
PASS DOMRectList indexed getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

test(() => {
assert_true('DOMRectList' in window);
}, 'DOMRectList is not [NoInterfaceObject]');
}, 'DOMRectList is exposed');

test(() => {
assert_false(domRectList instanceof Array);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

PASS Test driver
PASS idl_test setup
PASS idl_test validation
PASS DOMPointReadOnly interface: existence and properties of interface object
PASS DOMPointReadOnly interface object length
PASS DOMPointReadOnly interface object name
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js

// https://drafts.fxtf.org/geometry/#DOMPoint
// https://drafts.fxtf.org/geometry/#DOMRect
// https://drafts.fxtf.org/geometry/#DOMQuad
// https://drafts.fxtf.org/geometry/#DOMMatrix

"use strict";

idl_test(
["geometry"],
[],
idlArray => {
const domRectListList = [];
if ("document" in self) {
domRectListList.push(document.getElementById('log').getClientRects());
}
idlArray.add_objects({
DOMPointReadOnly: ["new DOMPointReadOnly()"],
DOMPoint: ["new DOMPoint()"],
DOMRectReadOnly: ["new DOMRectReadOnly()"],
DOMRect: ["new DOMRect()"],
DOMRectList: domRectListList,
DOMQuad: ["new DOMQuad()"],
DOMMatrixReadOnly: ["new DOMMatrixReadOnly()", "DOMMatrixReadOnly.fromMatrix({is2D: false})"],
DOMMatrix: ["new DOMMatrix()", "DOMMatrix.fromMatrix({is2D: false})"]
});
idlArray.prevent_multiple_testing("DOMMatrixReadOnly");
idlArray.prevent_multiple_testing("DOMMatrix");
}
);
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

PASS Test driver
PASS idl_test setup
PASS idl_test validation
PASS DOMPointReadOnly interface: existence and properties of interface object
PASS DOMPointReadOnly interface object length
PASS DOMPointReadOnly interface object name
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<!-- This file is required for WebKit test infrastructure to run the templated test -->

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ function matrix2D(dict) {
return matrix;
}

function checkMatrix(actual, expected, { epsilon = 0 } = {}) {
function checkMatrix(actual, expected, { epsilon = Number.MIN_VALUE } = {}) {
for (let member in expected) {
if (epsilon && typeof expected[member] === "number") {
assert_approx_equals(actual[member], expected[member], epsilon, member);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,3 @@ None
------------------------------------------------------------------------
List of files:
/LayoutTests/imported/w3c/web-platform-tests/css/geometry/support/dommatrix-test-util.js
/LayoutTests/imported/w3c/web-platform-tests/css/geometry/support/interfaces.js
Loading

0 comments on commit 71878cc

Please sign in to comment.