| <!doctype html> |
| <meta charset="utf-8"> |
| <title>CSSTransformValue.toMatrix</title> |
| <link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-csstransformcomponent-tomatrix"> |
| <meta name="assert" content="Test CSSTransformValue.toMatrix multiplies component matrices" /> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="../resources/testhelper.js"></script> |
| <script> |
| 'use strict'; |
| |
| const gEpsilon = 1e-6; |
| |
| test(() => { |
| const transformMatrix = new DOMMatrixReadOnly([1, 1, 1, 1, 1, 1]); |
| const transformArray = [ |
| new CSSScale(2, 2), |
| new CSSMatrixComponent(transformMatrix), |
| new CSSScale(5, 6) |
| ]; |
| |
| let expectedMatrix = new DOMMatrix(); |
| expectedMatrix.scaleSelf(2, 2); |
| expectedMatrix.multiplySelf(transformMatrix); |
| expectedMatrix.scaleSelf(5, 6); |
| |
| const transform = new CSSTransformValue(transformArray); |
| assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, gEpsilon); |
| }, 'CSSTransformValue.toMatrix() multiplies its component matrices'); |
| |
| test(() => { |
| const transformMatrix = new DOMMatrixReadOnly([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]); |
| let transformArray = [ |
| new CSSTranslate(CSS.px(1), CSS.px(1), CSS.px(1)), |
| new CSSRotate(1, 2, 3, CSS.deg(90)), |
| new CSSScale(2, 3, 2), |
| new CSSMatrixComponent(transformMatrix), |
| ]; |
| |
| transformArray.forEach(transform => transform.is2D = true); |
| |
| let expectedMatrix = new DOMMatrix(); |
| expectedMatrix.translateSelf(1, 1); |
| expectedMatrix.rotateSelf(90); |
| expectedMatrix.scaleSelf(2, 3); |
| expectedMatrix.multiplySelf(new DOMMatrixReadOnly([1, 2, 5, 6, 13, 14])); |
| |
| const transform = new CSSTransformValue(transformArray); |
| assert_matrix_approx_equals(transform.toMatrix(), expectedMatrix, gEpsilon); |
| }, 'CSSTransformValue.toMatrix() respects is2D changes in its components'); |
| |
| </script> |