blob: c5f5672829f49b9455ff2ea5df138f5f6d180b41 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="./resources/geometry-interfaces-test-helpers.js"></script>
<script>
test(() => {
var matrix = new DOMMatrix();
assert_identity_2d_matrix(matrix);
}, "DOMMatrix() constructor");
test(() => {
var other = new DOMMatrix();
other.m11 = 10;
other.m12 = 20;
other.m24 = 2;
other.m33 = 3;
other.m42 = 3;
other.m44 = 9;
var matrix = new DOMMatrix(other);
assert_3d_matrix_equals(matrix, [10, 20, 0, 0, 0, 1, 0, 2, 0, 0, 3, 0, 0, 3, 0, 9]);
}, "DOMMatrix(other) constructor");
test(() => {
var float32Array = new Float32Array([1, 2, 3, 4, 5, 6]);
var matrix2d = DOMMatrix.fromFloat32Array(float32Array);
assert_2d_matrix_equals(matrix2d, [1, 2, 3, 4, 5, 6]);
}, "DOMMatrix fromFloat32Array - 2D matrix");
test(() => {
// 3.1 is not representable as a 32-bit float
var float64Array = new Float64Array([1, 2, 3, 3.1, 4, 5]);
var matrix2d = DOMMatrix.fromFloat64Array(float64Array);
assert_2d_matrix_equals(matrix2d, [1, 2, 3, 3.1, 4, 5]);
}, "DOMMatrix fromFloat64Array - 2D matrix");
test(() => {
var float32Array = new Float32Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
var matrix3d = DOMMatrix.fromFloat32Array(float32Array);
assert_3d_matrix_equals(matrix3d, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
}, "DOMMatrix fromFloat32Array - 3D matrix");
test(() => {
// 10.1 and 16.6 are not representable as a 32-bit float
var float64Array = new Float64Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10.1, 11, 12, 13, 14, 15, 16.6]);
var matrix3d = DOMMatrix.fromFloat64Array(float64Array);
assert_3d_matrix_equals(matrix3d, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10.1, 11, 12, 13, 14, 15, 16.6]);
}, "DOMMatrix fromFloat64Array - 3D matrix");
test(() => {
var matrix = new DOMMatrix([1, 2, 3, 4, 5, 6]);
assert_2d_matrix_equals(matrix, [1, 2, 3, 4, 5, 6]);
}, "DOMMatrix(numberSequence) constructor");
test(() => {
var matrix = new DOMMatrix([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
assert_3d_matrix_equals(matrix, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]);
}, "DOMMatrix(numberSequence) constructor");
test(() => {
var matrix = new DOMMatrix();
matrix.a = 10;
matrix.b = 20;
matrix.m24 = 2;
matrix.m33 = 3;
matrix.m42 = 3;
matrix.m44 = 9;
assert_3d_matrix_equals(matrix, [10, 20, 0, 0, 0, 1, 0, 2, 0, 0, 3, 0, 0, 3, 0, 9]);
}, "DOMMatrix attributes");
test(() => {
var matrix = new DOMMatrix();
assert_true(matrix.is2D);
assert_true(matrix.isIdentity);
matrix.m31 = 1;
matrix.m33 = 0;
assert_false(matrix.is2D);
assert_false(matrix.isIdentity);
matrix.m31 = 0;
matrix.m33 = 1;
assert_false(matrix.is2D);
assert_true(matrix.isIdentity);
}, "DOMMatrix.is2D can never be set to 'true' when it was set to 'false' before calling setMatrixValue().");
test(() => {
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat32Array(new Float32Array([1, 2, 3, 4, 5])); },
"fromFloat32Array function only accepts 1 Float32Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat64Array(new Float64Array([1, 2, 3, 4, 5])); },
"fromFloat64Array function only accepts 1 Float64Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat32Array(new Float32Array([1, 2, 3, 4, 5, 6 ,7])); },
"fromFloat32Array function only accepts 1 Float32Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat64Array(new Float64Array([1, 2, 3, 4, 5, 6 ,7])); },
"fromFloat64Array function only accepts 1 Float64Array with 6 or 16 elements.");
}, "DOMMatrix fromFloat*Array - invalid array size of nearby 6");
test(() => {
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat32Array(new Float32Array([1, 2, 3, 4, 5, 6 ,7, 8, 9, 10, 11, 12, 13, 14, 15])); },
"fromFloat32Array function only accepts 1 Float32Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat64Array(new Float64Array([1, 2, 3, 4, 5, 6 ,7, 8, 9, 10, 11, 12, 13, 14, 15])); },
"fromFloat64Array function only accepts 1 Float64Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat32Array(new Float32Array([1, 2, 3, 4, 5, 6 ,7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])); },
"fromFloat32Array function only accepts 1 Float32Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat64Array(new Float64Array([1, 2, 3, 4, 5, 6 ,7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])); },
"fromFloat64Array function only accepts 1 Float64Array with 6 or 16 elements.");
}, "DOMMatrix fromFloat*Array - invalid array size of nearby 16");
test(() => {
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat32Array(new Float32Array([])); },
"fromFloat32Array function only accepts 1 Float32Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat64Array(new Float64Array([])); },
"fromFloat64Array function only accepts 1 Float64Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat32Array(new Float32Array([1])); },
"fromFloat32Array function only accepts 1 Float32Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat64Array(new Float64Array([1])); },
"fromFloat64Array function only accepts 1 Float64Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat32Array(new Float32Array(65536)); },
"fromFloat32Array function only accepts 1 Float32Array with 6 or 16 elements.");
assert_throws(new TypeError(), () => { DOMMatrix.fromFloat64Array(new Float64Array(65536)); },
"fromFloat64Array function only accepts 1 Float64Array with 6 or 16 elements.");
}, "DOMMatrix fromFloat*Array - invalid array size");
test(() => {
assert_identity_2d_matrix(DOMMatrix.fromMatrix());
}, "DOMMatrix.fromMatrix() with no parameter.");
test(() => {
assert_identity_2d_matrix(DOMMatrix.fromMatrix(null));
}, "DOMMatrix.fromMatrix() with null.");
test(() => {
assert_identity_2d_matrix(DOMMatrix.fromMatrix(undefined));
}, "DOMMatrix.fromMatrix() with undefined.");
test(() => {
assert_identity_2d_matrix(DOMMatrix.fromMatrix({}));
}, "DOMMatrix.fromMatrix() with empty object.");
test(() => {
var matrix = DOMMatrix.fromMatrix({a: 1, b: 2, c: 3, d: 4, e: 5, f: 6});
assert_2d_matrix_equals(matrix, [1, 2, 3, 4, 5, 6]);
}, "DOMMatrix.fromMatrix({a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}) should create a 2D DOMMatrix.");
test(() => {
var matrix = DOMMatrix.fromMatrix({m11: 1, m22: 2, m33: 3, m44: 4, m23: 5, m43: 6});
assert_3d_matrix_equals(matrix, [1, 0, 0, 0, 0, 2, 5, 0, 0, 0, 3, 0, 0, 0, 6, 4]);
}, "DOMMatrix.fromMatrix({m11: 1, m22: 2, m33: 3, m44: 4, m23: 5, m43: 6}) should create a 3D DOMMatrix.");
test(() => {
var matrix = DOMMatrix.fromMatrix({a: 7, c: 9});
assert_2d_matrix_equals(matrix, [7, 0, 9, 1, 0, 0]);
}, "If 2d related properties don't be set, should set to fallback.");
test(() => {
var matrix = DOMMatrix.fromMatrix({
m11: NaN, m12: NaN, m13: NaN, m14: NaN,
m21: NaN, m22: NaN, m23: NaN, m24: NaN,
m31: NaN, m32: NaN, m33: NaN, m34: NaN,
m41: NaN, m42: NaN, m43: NaN, m44: NaN,
is2D: false
});
assert_3d_matrix_equals(matrix, [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]);
}, "DOMMatrix.fromMatrix(): NaN test");
test(() => {
var identity_matrix = DOMMatrix.fromMatrix();
assert_true(identity_matrix.is2D);
assert_object_equals(identity_matrix.toJSON(),
{ a : 1, b : 0, c : 0, d : 1, e : 0, f : 0,
is2D : true, isIdentity : true,
m11 : 1, m12 : 0, m13 : 0, m14 : 0,
m21 : 0, m22 : 1, m23 : 0, m24 : 0,
m31 : 0, m32 : 0, m33 : 1, m34 : 0,
m41 : 0, m42 : 0, m43 : 0, m44 : 1});
}, "DOMMatrix toJSON() - identity matrix");
test(() => {
var matrix2d = new DOMMatrix([1, 2, 3, 3.1, 2, 1]);
assert_true(matrix2d.is2D);
assert_object_equals(matrix2d.toJSON(),
{ a : 1, b : 2, c : 3, d : 3.1, e : 2, f : 1,
is2D : true, isIdentity : false,
m11 : 1, m12 : 2, m13 : 0, m14 : 0,
m21 : 3, m22 : 3.1, m23 : 0, m24 : 0,
m31 : 0, m32 : 0, m33 : 1, m34 : 0,
m41 : 2, m42 : 1, m43 : 0, m44 : 1});
}, "DOMMatrix toJSON() - 2D matrix");
test(() => {
var matrix3d = new DOMMatrix([1, 2, 3, 4, 5, 6, 7, 8, 9, 10.1, 11, 12, 13, 14, 15, 16.6]);
assert_false(matrix3d.is2D);
assert_object_equals(matrix3d.toJSON(),
{ a : 1, b : 2, c : 5, d : 6, e : 13, f : 14,
is2D : false, isIdentity : false,
m11 : 1, m12 : 2, m13 : 3, m14 : 4,
m21 : 5, m22 : 6, m23 : 7, m24 : 8,
m31 : 9, m32 : 10.1, m33 : 11, m34 : 12,
m41 : 13, m42 : 14, m43 : 15, m44 : 16.6});
}, "DOMMatrix toJSON() - 3D matrix");
test(() => {
assert_throws(new TypeError(), () => {
var matrix = DOMMatrix.fromMatrix({a: 1, b: 2, m33: 3, m44: 4, is2D: true});
}, "The 'is2D' property is set to true but the input matrix is 3d matrix.");
assert_throws(new TypeError(), () => {
var matrix = DOMMatrix.fromMatrix({a: 1, b: 2, m11: 3});
}, "The 'a' property should equal the 'm11' property.");
}, "DOMMatrix.fromMatrix(): Exception test.");
</script>