wpt / css / geometry / DOMMatrix-001.html

Status: FAIL | Duration: 184ms | Subtests: 8/138 | Open test on wpt.live | wpt.fyi

Data from commit:
1884860 Copy-on-write style attribute blocks that are in the rule tree (#831) (2026-09-02)

SubtestStatusMessage
new DOMMatrix()FAILnot a constructor
new DOMMatrix(undefined)FAILnot a constructor
new DOMMatrix(new DOMMatrix())FAILnot a constructor
new DOMMatrix("none")FAILnot a constructor
new DOMMatrix(" none")FAILnot a constructor
new DOMMatrix("none ")FAILnot a constructor
new DOMMatrix("NONE")FAILnot a constructor
new DOMMatrix("none/**/")FAILnot a constructor
new DOMMatrix("/**/none")FAILnot a constructor
new DOMMatrix("")FAILnot a constructor
new DOMMatrix(float32Array) 16 elementsFAILnot a constructor
new DOMMatrix(float32Array) 6 elementsFAILnot a constructor
new DOMMatrix(float64Array) 16 elementsFAILnot a constructor
new DOMMatrix((float64Array) 6 elementsFAILnot a constructor
new DOMMatrix(sequence) 16 elementsFAILnot a constructor
new DOMMatrix(sequence) 6 elementsFAILnot a constructor
new DOMMatrix("scale(2) translateX(5px) translateY(5px)")FAILnot a constructor
new DOMMatrix("scale(2, 2) translateX(5px) translateY(5px)")FAILnot a constructor
new DOMMatrix("scale(2)translateX(5px)translateY(5px)")FAILnot a constructor
new DOMMatrix("scale(2) translateX(calc(2 * 2.5px)) translateY(5px)")FAILnot a constructor
new DOMMatrix("scale(2) translateX(5px) translateY(5px) rotate(5deg) rotate(-5deg)")FAILnot a constructor
new DOMMatrix("translateX (5px)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("scale(2 2) translateX(5) translateY(5)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("scale(2, 2), translateX(5) ,translateY(5)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("scale(sign(1em))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("scale(sibling-index())")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5em)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5ex)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5ch)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5rem)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5cqw)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5cqh)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5cqb)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5cqi)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5cqmin)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5cqmax)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5vw)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5vh)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5vb)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5vi)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5vmin)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5vmax)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(5%)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(calc(10px * sign(1em - 10px)))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("translateX(calc(10px * sibling-index()))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("rotate(5)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("rotate(5, 5, 5)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("rotate(5, 5px, 5px)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("rotate(5deg, 5px, 5px)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("rotate(calc(5deg * sign(1em - 10px)))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("rotate(calc(5deg * sibling-index()))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix(" ")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("/**/")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("\0")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix(";")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("none;")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("null")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix(null)FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("undefined")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("inherit")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("initial")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix("unset")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix(sequence)FAILnot a constructor
new DOMMatrix(matrix)FAILnot a constructor
new DOMMatrix("scale(2, 2), translateX(5px) translateY(5px)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrix(sequence) 17 elementsPASS
new DOMMatrix(sequence) 15 elementsPASS
new DOMMatrix(sequence) 5 elementsPASS
new DOMMatrix(sequence) 0 elementsPASS
new DOMMatrixReadOnly()FAILnot a constructor
new DOMMatrixReadOnly(undefined)FAILnot a constructor
new DOMMatrixReadOnly(new DOMMatrixReadOnly())FAILnot a constructor
new DOMMatrixReadOnly("none")FAILnot a constructor
new DOMMatrixReadOnly(" none")FAILnot a constructor
new DOMMatrixReadOnly("none ")FAILnot a constructor
new DOMMatrixReadOnly("NONE")FAILnot a constructor
new DOMMatrixReadOnly("none/**/")FAILnot a constructor
new DOMMatrixReadOnly("/**/none")FAILnot a constructor
new DOMMatrixReadOnly("")FAILnot a constructor
new DOMMatrixReadOnly(float32Array) 16 elementsFAILnot a constructor
new DOMMatrixReadOnly(float32Array) 6 elementsFAILnot a constructor
new DOMMatrixReadOnly(float64Array) 16 elementsFAILnot a constructor
new DOMMatrixReadOnly((float64Array) 6 elementsFAILnot a constructor
new DOMMatrixReadOnly(sequence) 16 elementsFAILnot a constructor
new DOMMatrixReadOnly(sequence) 6 elementsFAILnot a constructor
new DOMMatrixReadOnly("scale(2) translateX(5px) translateY(5px)")FAILnot a constructor
new DOMMatrixReadOnly("scale(2, 2) translateX(5px) translateY(5px)")FAILnot a constructor
new DOMMatrixReadOnly("scale(2)translateX(5px)translateY(5px)")FAILnot a constructor
new DOMMatrixReadOnly("scale(2) translateX(calc(2 * 2.5px)) translateY(5px)")FAILnot a constructor
new DOMMatrixReadOnly("scale(2) translateX(5px) translateY(5px) rotate(5deg) rotate(-5deg)")FAILnot a constructor
new DOMMatrixReadOnly("translateX (5px)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("scale(2 2) translateX(5) translateY(5)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("scale(2, 2), translateX(5) ,translateY(5)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("scale(sign(1em))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("scale(sibling-index())")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5em)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5ex)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5ch)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5rem)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5cqw)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5cqh)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5cqb)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5cqi)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5cqmin)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5cqmax)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5vw)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5vh)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5vb)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5vi)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5vmin)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5vmax)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(5%)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(calc(10px * sign(1em - 10px)))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("translateX(calc(10px * sibling-index()))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("rotate(5)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("rotate(5, 5, 5)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("rotate(5, 5px, 5px)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("rotate(5deg, 5px, 5px)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("rotate(calc(5deg * sign(1em - 10px)))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("rotate(calc(5deg * sibling-index()))")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly(" ")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("/**/")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("\0")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly(";")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("none;")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("null")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly(null)FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("undefined")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("inherit")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("initial")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly("unset")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly(sequence)FAILnot a constructor
new DOMMatrixReadOnly(matrix)FAILnot a constructor
new DOMMatrixReadOnly("scale(2, 2), translateX(5px) translateY(5px)")FAILassert_throws_dom: function "function() { new self[constr](string); }" threw object "TypeError: not a constructor" that is not a DOMException SyntaxError: property "code" is equal to undefined, expected 12
new DOMMatrixReadOnly(sequence) 17 elementsPASS
new DOMMatrixReadOnly(sequence) 15 elementsPASS
new DOMMatrixReadOnly(sequence) 5 elementsPASS
new DOMMatrixReadOnly(sequence) 0 elementsPASS

/css/geometry/DOMMatrix-001.html

<!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() {
                checkMatrix(new self[constr](), initial);
            }, `new ${constr}()`);

            test(function() {
                checkMatrix(new self[constr](undefined), initial);
            }, `new ${constr}(undefined)`);

            test(function() {
                checkMatrix(new self[constr](new self[constr]()), initial);
            }, `new ${constr}(new ${constr}())`);

            ['none',
             ' none',
             'none ',
             'NONE',
             'none/**/',
             '/**/none',
             '',
            ].forEach(function(string) {
                test(function() {
                    checkMatrix(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]);
                checkMatrix(new self[constr](float32Array), matrix3D(scaleTranslate2D));
            }, `new ${constr}(float32Array) 16 elements`);

            test(function() {
                var float32Array = new Float32Array([2.0, 0.0, 0.0, 2.0, 10.0, 10.0]);
                checkMatrix(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]);
                checkMatrix(new self[constr](float64Array), matrix3D(scaleTranslate2D));
            }, `new ${constr}(float64Array) 16 elements`);

            test(function() {
                var float64Array = new Float64Array([2.0, 0.0, 0.0, 2.0, 10.0, 10.0]);
                checkMatrix(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() {
                    var expected = sequence.length == 6 ? scaleTranslate2D : matrix3D(scaleTranslate2D);
                    checkMatrix(new self[constr](sequence), expected);
                }, `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)',
             'scale(sign(1em))',
             'scale(sibling-index())',
             'translateX(5em)',
             'translateX(5ex)',
             'translateX(5ch)',
             'translateX(5rem)',
             'translateX(5cqw)',
             'translateX(5cqh)',
             'translateX(5cqb)',
             'translateX(5cqi)',
             'translateX(5cqmin)',
             'translateX(5cqmax)',
             'translateX(5vw)',
             'translateX(5vh)',
             'translateX(5vb)',
             'translateX(5vi)',
             'translateX(5vmin)',
             'translateX(5vmax)',
             'translateX(5%)',
             'translateX(calc(10px * sign(1em - 10px)))',
             'translateX(calc(10px * sibling-index()))',
             'rotate(5)',
             'rotate(5, 5, 5)',
             'rotate(5, 5px, 5px)',
             'rotate(5deg, 5px, 5px)',
             'rotate(calc(5deg * sign(1em - 10px)))',
             'rotate(calc(5deg * sibling-index()))',
             ' ',
             '/**/',
             '\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];
                checkMatrix(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]);
                checkMatrix(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>