DOMMatrixInit-validate-fixup.html (6470B)
1 <!DOCTYPE html> 2 <title>Geometry Interfaces: DOMMatrixInit validate and fixup</title> 3 <link rel="help" href="https://drafts.fxtf.org/geometry/#dommatrixinit-dictionary"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="support/dommatrix-test-util.js"></script> 7 <script> 8 [ 9 {a: 1, m11: 2}, 10 {b: 0, m12: -1}, 11 {c: Infinity, m21: -Infinity}, 12 {d: 0, m22: NaN}, 13 {e: 1, m41: 1.00000001}, 14 {f: 0, m42: Number.MIN_VALUE}, 15 {m13: 1, is2D: true}, 16 {m14: 1, is2D: true}, 17 {m23: 1, is2D: true}, 18 {m24: 1, is2D: true}, 19 {m31: 1, is2D: true}, 20 {m32: 1, is2D: true}, 21 {m33: 0, is2D: true}, 22 {m33: -0, is2D: true}, 23 {m33: -1, is2D: true}, 24 {m34: 1, is2D: true}, 25 {m43: 1, is2D: true}, 26 {m44: 0, is2D: true}, 27 ].forEach(dict => { 28 test(() => { 29 assert_true('fromMatrix' in DOMMatrix, 'fromMatrix should exist'); 30 assert_throws_js(TypeError, () => DOMMatrix.fromMatrix(dict)); 31 assert_true('multiply' in DOMMatrix.prototype, 'multiply should exist'); 32 assert_throws_js(TypeError, () => new DOMMatrix().multiply(dict)); 33 assert_true('multiplySelf' in DOMMatrix.prototype, 'multiplySelf should exist'); 34 assert_throws_js(TypeError, () => new DOMMatrix().multiplySelf(dict)); 35 assert_true('preMultiplySelf' in DOMMatrix.prototype, 'preMultiplySelf should exist'); 36 assert_throws_js(TypeError, () => new DOMMatrix().preMultiplySelf(dict)); 37 }, `${format_dict(dict)} (invalid)`); 38 }); 39 40 [ 41 [{}, matrix2D({})], 42 [{is2D: undefined}, matrix2D({})], // undefined means the dictionary member is not present 43 [{a: 1, m11: 1}, matrix2D({m11: 1})], 44 [{b: 0, m12: undefined}, matrix2D({m12: 0})], 45 [{c: 0, m21: 0}, matrix2D({m21: 0})], 46 [{c: 0, m21: -0}, matrix2D({m21: -0})], 47 [{c: -0, m21: 0}, matrix2D({m21: 0})], 48 [{c: -0, m21: -0}, matrix2D({m21: -0})], 49 [{d: Infinity, m22: Infinity}, matrix2D({m22: Infinity})], 50 [{e: -Infinity, m41: -Infinity}, matrix2D({m41: -Infinity})], 51 [{f: NaN, m42: NaN}, matrix2D({m42: NaN})], 52 [{f: NaN, m42: NaN, is2D: true}, matrix2D({m42: NaN})], 53 [{f: 0, m42: null}, matrix2D({m42: 0})], // null is converted to 0 54 [{f: -0, m42: null}, matrix2D({m42: 0})], // null is converted to 0 55 [{a: 2}, matrix2D({m11: 2})], 56 [{b: 2}, matrix2D({m12: 2})], 57 [{c: 2}, matrix2D({m21: 2})], 58 [{d: 2}, matrix2D({m22: 2})], 59 [{e: 2}, matrix2D({m41: 2})], 60 [{f: 2}, matrix2D({m42: 2})], 61 [{a: -0, b: -0, c: -0, d: -0, e: -0, f: -0}, 62 matrix2D({m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0})], 63 [{a: -0, b: -0, c: -0, d: -0, e: -0, f: -0, is2D: true}, 64 matrix2D({m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0})], 65 [{m11:2}, matrix2D({m11: 2})], 66 [{m12:2}, matrix2D({m12: 2})], 67 [{m21:2}, matrix2D({m21: 2})], 68 [{m22:2}, matrix2D({m22: 2})], 69 [{m41:2}, matrix2D({m41: 2})], 70 [{m42:2}, matrix2D({m42: 2})], 71 [{m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0}, 72 matrix2D({m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0})], 73 [{m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0, is2D: true}, 74 matrix2D({m11: -0, m12: -0, m21: -0, m22: -0, m41: -0, m42: -0})], 75 [{m13: 0, is2D: true}, matrix2D({m13: 0})], 76 [{m13: -0, is2D: true}, matrix2D({m13: 0})], 77 [{m14: 0, is2D: true}, matrix2D({m14: 0})], 78 [{m14: -0, is2D: true}, matrix2D({m14: 0})], 79 [{m23: 0, is2D: true}, matrix2D({m23: 0})], 80 [{m23: -0, is2D: true}, matrix2D({m23: 0})], 81 [{m24: 0, is2D: true}, matrix2D({m24: 0})], 82 [{m24: -0, is2D: true}, matrix2D({m24: 0})], 83 [{m31: 0, is2D: true}, matrix2D({m31: 0})], 84 [{m31: -0, is2D: true}, matrix2D({m31: 0})], 85 [{m32: 0, is2D: true}, matrix2D({m32: 0})], 86 [{m32: -0, is2D: true}, matrix2D({m32: 0})], 87 [{m33: 1, is2D: true}, matrix2D({m33: 1})], 88 [{m34: 0, is2D: true}, matrix2D({m34: 0})], 89 [{m34: -0, is2D: true}, matrix2D({m34: 0})], 90 [{m43: 0, is2D: true}, matrix2D({m43: 0})], 91 [{m43: -0, is2D: true}, matrix2D({m43: 0})], 92 [{m44: 1, is2D: true}, matrix2D({m44: 1})], 93 [{is2D: true}, matrix2D({})], 94 ].forEach(([dict, expected]) => { 95 test(() => { 96 const matrix = DOMMatrix.fromMatrix(dict); 97 checkMatrix(matrix, expected); 98 }, `${format_dict(dict)} (2d)`); 99 }); 100 101 [ 102 [{m13: 1, is2D: false}, matrix3D({m13: 1})], 103 [{m14: 1, is2D: false}, matrix3D({m14: 1})], 104 [{m23: 1, is2D: false}, matrix3D({m23: 1})], 105 [{m24: 1, is2D: false}, matrix3D({m24: 1})], 106 [{m31: 1, is2D: false}, matrix3D({m31: 1})], 107 [{m32: 1, is2D: false}, matrix3D({m32: 1})], 108 [{m33: 0, is2D: false}, matrix3D({m33: 0})], 109 [{m33: -0, is2D: false}, matrix3D({m33: -0})], 110 [{m33: -1, is2D: false}, matrix3D({m33: -1})], 111 [{m34: 1, is2D: false}, matrix3D({m34: 1})], 112 [{m43: 1, is2D: false}, matrix3D({m43: 1})], 113 [{m44: 0, is2D: false}, matrix3D({m44: 0})], 114 [{m13: 1}, matrix3D({m13: 1})], 115 [{m14: 1}, matrix3D({m14: 1})], 116 [{m23: 1}, matrix3D({m23: 1})], 117 [{m24: 1}, matrix3D({m24: 1})], 118 [{m31: 1}, matrix3D({m31: 1})], 119 [{m32: 1}, matrix3D({m32: 1})], 120 [{m33: 0}, matrix3D({m33: 0})], 121 [{m34: 1}, matrix3D({m34: 1})], 122 [{m43: 1}, matrix3D({m43: 1})], 123 [{m44: 0}, matrix3D({m44: 0})], 124 [{is2D: false}, matrix3D({})], 125 [{is2D: null}, matrix3D({})], // null is converted to false 126 ].forEach(([dict, expected]) => { 127 test(() => { 128 const matrix = DOMMatrix.fromMatrix(dict); 129 checkMatrix(matrix, expected); 130 }, `${format_dict(dict)} (3d)`); 131 }); 132 </script>