blob: 250be2c80049702e5021addc648121019b09e7e9 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/comparisons.js"></script>
<script>
var EPSILON = 1e-6; // float epsilon
var testParams = [
{
input: new CSSScale(0, 0),
x: 0, y: 0, z: 1,
is2D: true,
cssText: "scale(0, 0)"
},
{
input: new CSSScale(1, 2),
x: 1, y: 2, z: 1,
is2D: true,
cssText: "scale(1, 2)"
},
{
input: new CSSScale(-2, -4),
x: -2, y: -4, z: 1,
is2D: true,
cssText: "scale(-2, -4)"
},
{
input: new CSSScale(3.4, 2.7),
x: 3.4, y: 2.7, z: 1,
is2D: true,
cssText: "scale(3.4, 2.7)"
},
{
input: new CSSScale(0, 0, 0),
x: 0, y: 0, z: 0,
is2D: false,
cssText: "scale3d(0, 0, 0)"
},
{
input: new CSSScale(1, 2, 3),
x: 1, y: 2, z: 3,
is2D: false,
cssText: "scale3d(1, 2, 3)"
},
{
input: new CSSScale(3.5, -2.7, -2),
x: 3.5, y: -2.7, z: -2,
is2D: false,
cssText: "scale3d(3.5, -2.7, -2)"
}
];
for (let params of testParams) {
test(() => {
assert_equals(params.input.x, params.x);
assert_equals(params.input.y, params.y);
assert_equals(params.input.z, params.z);
}, "x, y, and z values are correct for " + params.cssText);
}
for (let params of testParams) {
test(() => {
assert_equals(params.input.is2D, params.is2D);
}, "is2D value is correct for " + params.cssText);
}
for (let params of testParams) {
test(() => {
assert_equals(params.input.toString(), params.cssText);
}, "toString is correct for " + params.cssText);
}
test(() => {
assert_throws(new TypeError(), () => { new CSSScale(); });
assert_throws(new TypeError(), () => { new CSSScale(1); });
}, "Invalid number of arguments to constructor throws an exception.");
test(() => {
assert_throws(new TypeError(), () => { new CSSScale(NaN, 0); });
assert_throws(new TypeError(), () => { new CSSScale(0, NaN); });
assert_throws(new TypeError(), () => { new CSSScale(NaN, NaN); });
assert_throws(new TypeError(), () => { new CSSScale(Infinity, 0); });
assert_throws(new TypeError(), () => { new CSSScale(-Infinity, 0); });
assert_throws(new TypeError(), () => { new CSSScale("hello", 0); });
assert_throws(new TypeError(), () => { new CSSScale(0, "world"); });
assert_throws(new TypeError(), () => { new CSSScale(undefined, 0); });
assert_throws(new TypeError(), () => { new CSSScale({}, {}); });
assert_throws(new TypeError(), () => { new CSSScale("hello", 0, 0); });
assert_throws(new TypeError(), () => { new CSSScale(0, NaN, 0); });
assert_throws(new TypeError(), () => { new CSSScale(0, Infinity, 0); });
assert_throws(new TypeError(), () => { new CSSScale(0, 0, NaN); });
assert_throws(new TypeError(), () => { new CSSScale(0, 0, Infinity); });
assert_throws(new TypeError(), () => { new CSSScale(0, 0, -Infinity); });
assert_throws(new TypeError(), () => { new CSSScale(0, 0, undefined); });
assert_throws(new TypeError(), () => {
new CSSScale(undefined, undefined, 0);
});
assert_throws(new TypeError(), () => { new CSSScale(NaN, undefined, 0); });
assert_throws(new TypeError(), () => { new CSSScale(NaN, 0, NaN); });
assert_throws(new TypeError(), () => { new CSSScale(0, "hello", "world"); });
assert_throws(new TypeError(), () => { new CSSScale(0, {}, {}); });
assert_throws(new TypeError(), () => { new CSSScale({}, {}, {}); });
assert_throws(new TypeError(), () => { new CSSScale(NaN, NaN, NaN); });
}, "Invalid input throws an exception.");
for (let params of testParams) {
test(() => {
var input = params.input;
var transformValue = new CSSTransformValue([input]);
var inputAsMatrix = transformValue.toMatrix();
assert_equals(inputAsMatrix.is2D, input.is2D);
var expectedMatrix = input.is2D ?
new DOMMatrixReadOnly([input.x, 0, 0, input.y, 0, 0]) :
new DOMMatrixReadOnly(
[input.x, 0, 0, 0, 0, input.y, 0, 0, 0, 0, input.z, 0, 0, 0, 0, 1]);
assert_matrix_approx_equals(inputAsMatrix, expectedMatrix, EPSILON);
}, "asMatrix is constructed correctly for " + params.cssText);
}
test(() => {
var actual = new CSSScale(0, 0, 0);
actual.x = 1;
actual.y = 2;
actual.z = 3;
assert_equals(actual.x, 1);
assert_equals(actual.y, 2);
assert_equals(actual.z, 3);
}, "x, y, z are mutable attributes.");
</script>