summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/geometry/DOMMatrix-001.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/geometry/DOMMatrix-001.html')
-rw-r--r--testing/web-platform/tests/css/geometry/DOMMatrix-001.html204
1 files changed, 204 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/geometry/DOMMatrix-001.html b/testing/web-platform/tests/css/geometry/DOMMatrix-001.html
new file mode 100644
index 0000000000..1752c2c5ca
--- /dev/null
+++ b/testing/web-platform/tests/css/geometry/DOMMatrix-001.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Geometry Interfaces: DOMMatrix and DOMMatrixReadOnly constructors</title>
+ <link rel="author" title="Dirk Schulze" href="mailto:dschulze@adobe.com" />
+ <link rel="help" href="https://drafts.fxtf.org/geometry/#DOMMatrix">
+ <link rel="help" href="https://drafts.fxtf.org/geometry/#dommatrix-constructors">
+ <link rel="help" href="https://drafts.fxtf.org/geometry/#dom-dommatrix-dommatrix">
+ <script src="support/dommatrix-test-util.js"></script>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+ <div id="log"></div>
+ <script>
+ var initial = {
+ m11: 1, m21: 0, m31: 0, m41: 0,
+ m12: 0, m22: 1, m32: 0, m42: 0,
+ m13: 0, m23: 0, m33: 1, m43: 0,
+ m14: 0, m24: 0, m34: 0, m44: 1,
+ is2D: true,
+ isIdentity: true
+ };
+ var scaleTranslate2D = {
+ m11: 2, m21: 0, m31: 0, m41: 10,
+ m12: 0, m22: 2, m32: 0, m42: 10,
+ m13: 0, m23: 0, m33: 1, m43: 0,
+ m14: 0, m24: 0, m34: 0, m44: 1,
+ is2D: true,
+ isIdentity: false
+ };
+ ["DOMMatrix", "DOMMatrixReadOnly"].forEach(function(constr) {
+ test(function() {
+ checkDOMMatrix(new self[constr](), initial);
+ }, `new ${constr}()`);
+
+ test(function() {
+ checkDOMMatrix(new self[constr](undefined), initial);
+ }, `new ${constr}(undefined)`);
+
+ test(function() {
+ checkDOMMatrix(new self[constr](new self[constr]()), initial);
+ }, `new ${constr}(new ${constr}())`);
+
+ ['none',
+ ' none',
+ 'none ',
+ 'NONE',
+ 'none/**/',
+ '/**/none',
+ '',
+ ].forEach(function(string) {
+ test(function() {
+ checkDOMMatrix(new self[constr](string), initial);
+ }, `new ${constr}(${format_value(string)})`);
+ });
+
+ test(function() {
+ var float32Array = new Float32Array([
+ 2.0, 0.0, 0.0, 0.0,
+ 0.0, 2.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 10.0, 10.0, 0.0, 1.0]);
+ checkDOMMatrix(new self[constr](float32Array), scaleTranslate2D, false);
+ }, `new ${constr}(float32Array) 16 elements`);
+
+ test(function() {
+ var float32Array = new Float32Array([2.0, 0.0, 0.0, 2.0, 10.0, 10.0]);
+ checkDOMMatrix(new self[constr](float32Array), scaleTranslate2D);
+ }, `new ${constr}(float32Array) 6 elements`);
+
+ test(function() {
+ var float64Array = new Float64Array([
+ 2.0, 0.0, 0.0, 0.0,
+ 0.0, 2.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 10.0, 10.0, 0.0, 1.0]);
+ checkDOMMatrix(new self[constr](float64Array), scaleTranslate2D, false);
+ }, `new ${constr}(float64Array) 16 elements`);
+
+ test(function() {
+ var float64Array = new Float64Array([2.0, 0.0, 0.0, 2.0, 10.0, 10.0]);
+ checkDOMMatrix(new self[constr](float64Array), scaleTranslate2D);
+ }, `new ${constr}((float64Array) 6 elements`);
+
+ [
+ [2.0, 0.0, 0.0, 0.0,
+ 0.0, 2.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 10.0, 10.0, 0.0, 1.0],
+ [2.0, 0.0, 0.0, 2.0, 10.0, 10.0],
+ ].forEach(function(sequence) {
+ test(function() {
+ checkDOMMatrix(new self[constr](sequence), scaleTranslate2D,
+ sequence.length == 6);
+ }, `new ${constr}(sequence) ${sequence.length} elements`);
+ });
+
+ {
+ const epsilon = 0.0000000005;
+ ['scale(2) translateX(5px) translateY(5px)',
+ 'scale(2, 2) translateX(5px) translateY(5px)',
+ 'scale(2)translateX(5px)translateY(5px)',
+ 'scale(2) translateX(calc(2 * 2.5px)) translateY(5px)',
+ 'scale(2) translateX(5px) translateY(5px) rotate(5deg) rotate(-5deg)',
+ ].forEach(function(string) {
+ test(function() {
+ checkMatrix(new self[constr](string), scaleTranslate2D, { epsilon });
+ }, `new ${constr}(${format_value(string)})`);
+ });
+ }
+
+ ['translateX (5px)',
+ 'scale(2 2) translateX(5) translateY(5)',
+ 'scale(2, 2), translateX(5) ,translateY(5)',
+ 'translateX(5em)',
+ 'translateX(5ex)',
+ 'translateX(5ch)',
+ 'translateX(5rem)',
+ 'translateX(5vw)',
+ 'translateX(5vh)',
+ 'translateX(5vmin)',
+ 'translateX(5vmax)',
+ 'translateX(5%)',
+ 'rotate(5)',
+ 'rotate(5, 5, 5)',
+ 'rotate(5, 5px, 5px)',
+ 'rotate(5deg, 5px, 5px)',
+ ' ',
+ '/**/',
+ '\0',
+ ';',
+ 'none;',
+ 'null',
+ null, // is converted to 'null' by IDL
+ 'undefined',
+ 'inherit',
+ 'initial',
+ 'unset',
+ ].forEach(function(string) {
+ test(function() {
+ assert_throws_dom('SyntaxError', function() { new self[constr](string); });
+ }, `new ${constr}(${format_value(string)})`);
+ });
+
+ test(function() {
+ var sequence = [
+ 2.0, 1.0, 0.0, 0.0,
+ 1.0, 2.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 10.0, 10.0, 0.0, 1.0];
+ checkDOMMatrix(new self[constr](sequence), {
+ m11: 2, m21: 1, m31: 0, m41: 10,
+ m12: 1, m22: 2, m32: 0, m42: 10,
+ m13: 0, m23: 0, m33: 1, m43: 0,
+ m14: 0, m24: 0, m34: 0, m44: 1,
+ is2D: false,
+ isIdentity: false
+ });
+ }, `new ${constr}(sequence)`);
+
+ test(function() {
+ var matrix = new self[constr]([
+ 2.0, 1.0, 0.0, 0.0,
+ 1.0, 2.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 10.0, 10.0, 0.0, 1.0]);
+ checkDOMMatrix(new self[constr](matrix), {
+ m11: 2, m21: 1, m31: 0, m41: 10,
+ m12: 1, m22: 2, m32: 0, m42: 10,
+ m13: 0, m23: 0, m33: 1, m43: 0,
+ m14: 0, m24: 0, m34: 0, m44: 1,
+ is2D: false,
+ isIdentity: false
+ });
+ }, `new ${constr}(matrix)`);
+
+ ['scale(2, 2), translateX(5px) translateY(5px)',
+ ].forEach(function(string) {
+ test(function() {
+ assert_throws_dom("SyntaxError", function() { new self[constr](string); });
+ }, `new ${constr}(${format_value(string)})`);
+ });
+
+ [
+ [2.0, 0.0, 0.0, 0.0,
+ 0.0, 2.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 10.0, 10.0, 0.0, 2.0, 0.0], // 17 elements
+ [2.0, 0.0, 0.0, 0.0,
+ 0.0, 2.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 10.0, 10.0, 0.0], // 15 elements
+ [2.0, 0.0, 0.0, 2.0, 10.0], // 5 elements
+ [], // 0 elements
+ ].forEach(function(sequence) {
+ test(function() {
+ assert_throws_js(TypeError, function() { new self[constr](sequence); });
+ }, `new ${constr}(sequence) ${sequence.length} elements`);
+ });
+ });
+ </script>
+</body>
+</html>