summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/geometry/DOMMatrix2DInit-validate-fixup.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/geometry/DOMMatrix2DInit-validate-fixup.html')
-rw-r--r--testing/web-platform/tests/css/geometry/DOMMatrix2DInit-validate-fixup.html147
1 files changed, 147 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/geometry/DOMMatrix2DInit-validate-fixup.html b/testing/web-platform/tests/css/geometry/DOMMatrix2DInit-validate-fixup.html
new file mode 100644
index 0000000000..a7257aa288
--- /dev/null
+++ b/testing/web-platform/tests/css/geometry/DOMMatrix2DInit-validate-fixup.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<title>Geometry Interfaces: DOMMatrix2DInit validate and fixup</title>
+<link rel="help" href="https://drafts.fxtf.org/geometry/#dommatrixinit-dictionary">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-context-2d-settransform">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/dommatrix-test-util.js"></script>
+<canvas id=canvas hidden></canvas>
+<script>
+setup(() => {
+ window.canvas = document.getElementById('canvas');
+ window.ctx = canvas.getContext('2d');
+ window.ctx.fillStyle = '#000';
+});
+
+function clearCanvas(ctx) {
+ ctx.resetTransform();
+ ctx.clearRect(0, 0, window.canvas.width, window.canvas.height);
+}
+
+function drawRectWithSetTransform(ctx, transform) {
+ clearCanvas(ctx);
+ ctx.setTransform(transform);
+ ctx.fillRect(20, 20, 30, 30);
+ return window.canvas.toDataURL();
+}
+
+function drawRectWithAddPathTransform(ctx, transform) {
+ clearCanvas(ctx);
+ var path = new Path2D();
+ path.rect(20, 20, 30, 30);
+ var transformedPath = new Path2D();
+ if (transform === undefined) {
+ transformedPath.addPath(path);
+ } else {
+ transformedPath.addPath(path, transform);
+ }
+ ctx.fill(transformedPath);
+ return window.canvas.toDataURL();
+}
+
+var emptyCanvasURL = window.canvas.toDataURL();
+
+[
+ {a: 1, m11: 2},
+ {b: 0, m12: -1},
+ {c: Infinity, m21: -Infinity},
+ {d: 0, m22: NaN},
+ {e: 1, m41: 1.00000001},
+ {f: 0, m42: Number.MIN_VALUE},
+].forEach(dict => {
+ test(() => {
+ ctx.resetTransform();
+ assert_throws_js(TypeError, () => ctx.setTransform(dict));
+ }, `setTransform(${format_dict(dict)}) (invalid)`);
+
+ test(() => {
+ assert_throws_js(TypeError, () => drawRectWithAddPathTransform(ctx, dict));
+ }, `addPath(${format_dict(dict)}) (invalid)`);
+});
+
+test(() => {
+ ctx.resetTransform();
+ ctx.setTransform(1, 2, 3, 4, 5, 6);
+ const matrix = ctx.getTransform();
+ checkMatrix(matrix, matrix2D({m11: 1, m12: 2, m21: 3, m22: 4, m41: 5, m42: 6}));
+}, `setTransform (Sanity check without dictionary)`);
+
+test(() => {
+ var ident = matrix2D({});
+ var expectedResultURL = drawRectWithSetTransform(ctx, ident);
+ var actualResultURL = drawRectWithAddPathTransform(ctx);
+ assert_equals(actualResultURL, expectedResultURL);
+}, `addPath (Sanity check without second parameter)`);
+
+[
+ // Input dict that are 2D
+ [{}, matrix2D({})],
+ [{is2D: undefined}, matrix2D({})],
+ [{a: 1, m11: 1}, matrix2D({m11: 1})],
+ [{b: 0, m12: undefined}, matrix2D({m12: 0})],
+ [{c: 0, m21: 0}, matrix2D({m21: 0})],
+ [{c: 0, m21: -0}, matrix2D({m21: -0})],
+ [{c: -0, m21: 0}, matrix2D({m21: 0})],
+ [{c: -0, m21: -0}, matrix2D({m21: -0})],
+ [{d: Infinity, m22: Infinity}, null], // setTransform: silently ignore / addPath: silently halt
+ [{e: -Infinity, m41: -Infinity}, null], // setTransform: silently ignore / addPath: silently halt
+ [{f: NaN, m42: NaN}, null], // setTransform: silently ignore / addPath: silently halt
+ [{f: NaN, m42: NaN, is2D: true}, null], // setTransform: silently ignore / addPath: silently halt
+ [{f: 0, m42: null}, matrix2D({m42: 0})], // null is converted to 0
+ [{f: -0, m42: null}, matrix2D({m42: 0})], // null is converted to 0
+ [{a: 2}, matrix2D({m11: 2})],
+ [{b: 2}, matrix2D({m12: 2})],
+ [{c: 2}, matrix2D({m21: 2})],
+ [{d: 2}, matrix2D({m22: 2})],
+ [{e: 2}, matrix2D({m41: 2})],
+ [{f: 2}, matrix2D({m42: 2})],
+ [{a: -0, b: -0, c: -0, d: -0, e: -0, f: -0},
+ matrix2D({m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0})],
+ [{a: -0, b: -0, c: -0, d: -0, e: -0, f: -0, is2D: true},
+ matrix2D({m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0})],
+ [{m11:2}, matrix2D({m11: 2})],
+ [{m12:2}, matrix2D({m12: 2})],
+ [{m21:2}, matrix2D({m21: 2})],
+ [{m22:2}, matrix2D({m22: 2})],
+ [{m41:2}, matrix2D({m41: 2})],
+ [{m42:2}, matrix2D({m42: 2})],
+ [{m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0},
+ matrix2D({m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0})],
+ [{m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0, is2D: true},
+ matrix2D({m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0})],
+ [{m13: 0, is2D: true}, matrix2D({})],
+ [{m13: -0, is2D: true}, matrix2D({})],
+ [{m14: 0, is2D: true}, matrix2D({})],
+ [{m14: -0, is2D: true}, matrix2D({})],
+ [{m23: 0, is2D: true}, matrix2D({})],
+ [{m23: -0, is2D: true}, matrix2D({})],
+ [{m24: 0, is2D: true}, matrix2D({})],
+ [{m24: -0, is2D: true}, matrix2D({})],
+ [{m31: 0, is2D: true}, matrix2D({})],
+ [{m31: -0, is2D: true}, matrix2D({})],
+ [{m32: 0, is2D: true}, matrix2D({})],
+ [{m32: -0, is2D: true}, matrix2D({})],
+ [{m33: 1, is2D: true}, matrix2D({})],
+ [{m34: 0, is2D: true}, matrix2D({})],
+ [{m34: -0, is2D: true}, matrix2D({})],
+ [{m43: 0, is2D: true}, matrix2D({})],
+ [{m43: -0, is2D: true}, matrix2D({})],
+ [{m44: 1, is2D: true}, matrix2D({})],
+ [{is2D: true}, matrix2D({})],
+].forEach(([dict, expected]) => {
+ test(() => {
+ ctx.resetTransform();
+ ctx.setTransform(dict);
+ const matrix = ctx.getTransform();
+ checkMatrix(matrix, expected || matrix2D({}));
+ }, `setTransform(${format_dict(dict)})`);
+
+ test(() => {
+ var expectedResultURL = expected ?
+ drawRectWithSetTransform(ctx, expected) :
+ emptyCanvasURL;
+ var actualResultURL = drawRectWithAddPathTransform(ctx, dict);
+ assert_equals(actualResultURL, expectedResultURL);
+ }, `addPath(${format_dict(dict)})`);
+ });
+</script>