317 lines
8.1 KiB
HTML
317 lines
8.1 KiB
HTML
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<script src="../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="description"></div>
|
|
<div id="console"></div>
|
|
|
|
<script>
|
|
|
|
description("This test exercises the CSSMatrix interface");
|
|
|
|
debug("");
|
|
debug("CSSMatrix constructors");
|
|
|
|
|
|
var m = new WebKitCSSMatrix();
|
|
shouldBeNonNull('m');
|
|
shouldBeNonNull('new WebKitCSSMatrix()');
|
|
shouldBeNonNull('new WebKitCSSMatrix(m)');
|
|
shouldBeNonNull('new WebKitCSSMatrix("matrix(1, 0, 0, 1, 0, 0)")');
|
|
shouldBeNonNull('new WebKitCSSMatrix("")');
|
|
shouldBeNonNull('new WebKitCSSMatrix("none")');
|
|
shouldBeNonNull('new WebKitCSSMatrix(" none ")');
|
|
|
|
debug("");
|
|
debug("Test toString");
|
|
var m = new WebKitCSSMatrix("matrix(1, 0, 0, 1, 0, 0)");
|
|
var s = m.toString();
|
|
var a = s.split('(');
|
|
shouldBe('a[0]', '"matrix"');
|
|
var a2 = a[1].split(',');
|
|
shouldBe('parseFloat(a2[0])', '1');
|
|
shouldBe('parseFloat(a2[1])', '0');
|
|
shouldBe('parseFloat(a2[2])', '0');
|
|
shouldBe('parseFloat(a2[3])', '1');
|
|
shouldBe('parseFloat(a2[4])', '0');
|
|
var a3 = a2[5].split(")");
|
|
shouldBe('parseFloat(a3[0])', '0');
|
|
shouldBe('a3[1]', '""');
|
|
|
|
debug("");
|
|
debug("Test bad input to string constructor");
|
|
shouldThrow('new WebKitCSSMatrix("banana")');
|
|
|
|
debug("");
|
|
debug("Test attributes on default matrix");
|
|
m = new WebKitCSSMatrix();
|
|
shouldBe('m.a', '1');
|
|
shouldBe('m.b', '0');
|
|
shouldBe('m.c', '0');
|
|
shouldBe('m.d', '1');
|
|
shouldBe('m.e', '0');
|
|
shouldBe('m.f', '0');
|
|
|
|
debug("");
|
|
debug("Test attributes on custom matrix");
|
|
m = new WebKitCSSMatrix("matrix(11, 12, 21, 22, 41, 42)");
|
|
shouldBe('m.a', '11');
|
|
shouldBe('m.b', '12');
|
|
shouldBe('m.c', '21');
|
|
shouldBe('m.d', '22');
|
|
shouldBe('m.e', '41');
|
|
shouldBe('m.f', '42');
|
|
|
|
debug("");
|
|
debug("Test setMatrixValue - set to matrix()");
|
|
m = new WebKitCSSMatrix();
|
|
m.setMatrixValue("matrix(11, 12, 21, 22, 41, 42)");
|
|
shouldBe('m.a', '11');
|
|
shouldBe('m.b', '12');
|
|
shouldBe('m.c', '21');
|
|
shouldBe('m.d', '22');
|
|
shouldBe('m.e', '41');
|
|
shouldBe('m.f', '42');
|
|
|
|
debug("");
|
|
debug("Test setMatrixValue - set to translate(10px, 20px) scale(2, 3)");
|
|
m = new WebKitCSSMatrix();
|
|
m.setMatrixValue("translate(10px, 20px) scale(2, 3)");
|
|
shouldBe('m.a', '2');
|
|
shouldBe('m.b', '0');
|
|
shouldBe('m.c', '0');
|
|
shouldBe('m.d', '3');
|
|
shouldBe('m.e', '10');
|
|
shouldBe('m.f', '20');
|
|
|
|
debug("");
|
|
debug("Test throwing exception from setMatrixValue");
|
|
shouldThrow('m.setMatrixValue("banana")');
|
|
shouldThrow('m.setMatrixValue("translate(10em, 20%)")');
|
|
shouldThrow('m.setMatrixValue("translate(10px, 20px) scale()")');
|
|
|
|
debug("");
|
|
debug("Test attributes on translate() and accumulation");
|
|
m = new WebKitCSSMatrix();
|
|
var m2 = m.translate(50,0);
|
|
m2 = m2.translate(50,50);
|
|
shouldBe('m2.a', '1');
|
|
shouldBe('m2.b', '0');
|
|
shouldBe('m2.c', '0');
|
|
shouldBe('m2.d', '1');
|
|
shouldBe('m2.e', '100');
|
|
shouldBe('m2.f', '50');
|
|
|
|
debug("");
|
|
debug("Test immutability of translate");
|
|
shouldBe('parseFloat(m.a)', '1');
|
|
shouldBe('parseFloat(m.b)', '0');
|
|
shouldBe('parseFloat(m.c)', '0');
|
|
shouldBe('parseFloat(m.d)', '1');
|
|
shouldBe('parseFloat(m.e)', '0');
|
|
shouldBe('parseFloat(m.f)', '0');
|
|
|
|
debug("");
|
|
debug("Test attributes on scale()");
|
|
var m3 = m2.scale(5);
|
|
shouldBe('m3.a', '5');
|
|
shouldBe('m3.b', '0');
|
|
shouldBe('m3.c', '0');
|
|
shouldBe('m3.d', '5');
|
|
shouldBe('m3.e', '100');
|
|
shouldBe('m3.f', '50');
|
|
|
|
debug("");
|
|
debug("Test immutability of scale()");
|
|
shouldBe('parseFloat(m2.a)', '1');
|
|
shouldBe('parseFloat(m2.b)', '0');
|
|
shouldBe('parseFloat(m2.c)', '0');
|
|
shouldBe('parseFloat(m2.d)', '1');
|
|
shouldBe('parseFloat(m2.e)', '100');
|
|
shouldBe('parseFloat(m2.f)', '50');
|
|
|
|
debug("");
|
|
debug("Test attributes on non-uniform scale()");
|
|
var m4 = m3.scale(2,1);
|
|
shouldBe('m4.a', '10');
|
|
shouldBe('m4.b', '0');
|
|
shouldBe('m4.c', '0');
|
|
shouldBe('m4.d', '5');
|
|
shouldBe('m4.e', '100');
|
|
shouldBe('m4.f', '50');
|
|
|
|
debug("");
|
|
debug("Test immutability of non-uniform scale()");
|
|
shouldBe('parseFloat(m3.a)', '5');
|
|
shouldBe('parseFloat(m3.b)', '0');
|
|
shouldBe('parseFloat(m3.c)', '0');
|
|
shouldBe('parseFloat(m3.d)', '5');
|
|
shouldBe('parseFloat(m3.e)', '100');
|
|
shouldBe('parseFloat(m3.f)', '50');
|
|
|
|
debug("");
|
|
debug("Test rotate");
|
|
m = new WebKitCSSMatrix();
|
|
m2 = m.rotate(10);
|
|
shouldBe('parseFloat(m2.a.toPrecision(6))', '0.984808');
|
|
shouldBe('parseFloat(m2.b.toPrecision(6))', '0.173648');
|
|
shouldBe('parseFloat(m2.c.toPrecision(6))', '-0.173648');
|
|
shouldBe('parseFloat(m2.d.toPrecision(6))', '0.984808');
|
|
shouldBe('m.e', '0');
|
|
shouldBe('m.f', '0');
|
|
|
|
debug("");
|
|
debug("Test immutability of rotate");
|
|
shouldBe('parseFloat(m.a)', '1');
|
|
shouldBe('parseFloat(m.b)', '0');
|
|
shouldBe('parseFloat(m.c)', '0');
|
|
shouldBe('parseFloat(m.d)', '1');
|
|
shouldBe('parseFloat(m.e)', '0');
|
|
shouldBe('parseFloat(m.f)', '0');
|
|
|
|
debug("");
|
|
debug("Test skew in horizontal direction");
|
|
m = new WebKitCSSMatrix();
|
|
m2 = m.skewX(10);
|
|
shouldBe('parseFloat(m2.a)', '1');
|
|
shouldBe('parseFloat(m2.b)', '0');
|
|
shouldBe('parseFloat(m2.c.toPrecision(6))', '0.176327');
|
|
shouldBe('parseFloat(m2.d)', '1');
|
|
shouldBe('parseFloat(m2.e)', '0');
|
|
shouldBe('parseFloat(m2.f)', '0');
|
|
|
|
debug("");
|
|
debug("Test immutability of horizontal skew");
|
|
shouldBe('parseFloat(m.a)', '1');
|
|
shouldBe('parseFloat(m.b)', '0');
|
|
shouldBe('parseFloat(m.c)', '0');
|
|
shouldBe('parseFloat(m.d)', '1');
|
|
shouldBe('parseFloat(m.e)', '0');
|
|
shouldBe('parseFloat(m.f)', '0');
|
|
|
|
debug("");
|
|
debug("Test skew in vertical direction");
|
|
m = new WebKitCSSMatrix();
|
|
m2 = m.skewY(35);
|
|
shouldBe('parseFloat(m2.a)', '1');
|
|
shouldBe('parseFloat(m2.b.toPrecision(6))', '0.700208');
|
|
shouldBe('parseFloat(m2.c)', '0');
|
|
shouldBe('parseFloat(m2.d)', '1');
|
|
shouldBe('parseFloat(m2.e)', '0');
|
|
shouldBe('parseFloat(m2.f)', '0');
|
|
|
|
debug("");
|
|
debug("Test immutability of vertical skew");
|
|
shouldBe('parseFloat(m.a)', '1');
|
|
shouldBe('parseFloat(m.b)', '0');
|
|
shouldBe('parseFloat(m.c)', '0');
|
|
shouldBe('parseFloat(m.d)', '1');
|
|
shouldBe('parseFloat(m.e)', '0');
|
|
shouldBe('parseFloat(m.f)', '0');
|
|
|
|
debug("");
|
|
debug("Test multiply");
|
|
m = new WebKitCSSMatrix("matrix(1, 2, 3, 4, 5, 6)");
|
|
m2 = new WebKitCSSMatrix("matrix(7, 8, 9, 10, 11, 12)");
|
|
var m3 = m.multiply(m2);
|
|
shouldBe('parseFloat(m3.a)', '31');
|
|
shouldBe('parseFloat(m3.b)', '46');
|
|
shouldBe('parseFloat(m3.c)', '39');
|
|
shouldBe('parseFloat(m3.d)', '58');
|
|
shouldBe('parseFloat(m3.e)', '52');
|
|
shouldBe('parseFloat(m3.f)', '76');
|
|
|
|
debug("");
|
|
debug("Test that multiply works in the right direction");
|
|
var tx = new WebKitCSSMatrix();
|
|
var sx = new WebKitCSSMatrix();
|
|
tx = tx.translate(100,0);
|
|
sx = sx.scale(2,1);
|
|
m = tx.multiply(sx);
|
|
shouldBe('m.a', '2');
|
|
shouldBe('m.b', '0');
|
|
shouldBe('m.c', '0');
|
|
shouldBe('m.d', '1');
|
|
shouldBe('m.e', '100');
|
|
shouldBe('m.f', '0');
|
|
|
|
debug("")
|
|
debug("Test immutability of multiply");
|
|
shouldBe('tx.a', '1');
|
|
shouldBe('tx.b', '0');
|
|
shouldBe('tx.c', '0');
|
|
shouldBe('tx.d', '1');
|
|
shouldBe('tx.e', '100');
|
|
shouldBe('tx.f', '0');
|
|
shouldBe('sx.a', '2');
|
|
shouldBe('sx.b', '0');
|
|
shouldBe('sx.c', '0');
|
|
shouldBe('sx.d', '1');
|
|
shouldBe('sx.e', '0');
|
|
shouldBe('sx.f', '0');
|
|
|
|
debug("");
|
|
debug("Test multiply with missing argument");
|
|
m = new WebKitCSSMatrix("matrix(1, 2, 3, 4, 5, 6)");
|
|
m2 = m.multiply();
|
|
shouldBe('m2.a', '1');
|
|
shouldBe('m2.b', '2');
|
|
shouldBe('m2.c', '3');
|
|
shouldBe('m2.d', '4');
|
|
shouldBe('m2.e', '5');
|
|
shouldBe('m2.f', '6');
|
|
|
|
debug("");
|
|
debug("Test inverse");
|
|
m = new WebKitCSSMatrix("matrix(2, 0, 0, 2, 10, 20)");
|
|
m2 = m.inverse();
|
|
|
|
shouldBe('parseFloat(m2.a)', '0.5');
|
|
shouldBe('parseFloat(m2.b)', '0');
|
|
shouldBe('parseFloat(m2.c)', '0');
|
|
shouldBe('parseFloat(m2.d)', '0.5');
|
|
shouldBe('parseFloat(m2.e)', '-5');
|
|
shouldBe('parseFloat(m2.f)', '-10');
|
|
|
|
debug("");
|
|
debug("Test immutability of inverse");
|
|
shouldBe('parseFloat(m.a)', '2');
|
|
shouldBe('parseFloat(m.b)', '0');
|
|
shouldBe('parseFloat(m.c)', '0');
|
|
shouldBe('parseFloat(m.d)', '2');
|
|
shouldBe('parseFloat(m.e)', '10');
|
|
shouldBe('parseFloat(m.f)', '20');
|
|
|
|
debug("");
|
|
debug("Test throwing exception from inverse");
|
|
m = new WebKitCSSMatrix("matrix(0, 0, 0, 0, 0, 0)"); // not invertible
|
|
m2 = m.inverse();
|
|
|
|
shouldBeNaN('m2.a');
|
|
shouldBeNaN('m2.b');
|
|
shouldBeNaN('m2.c');
|
|
shouldBeNaN('m2.d');
|
|
shouldBeNaN('m2.e');
|
|
shouldBeNaN('m2.f');
|
|
|
|
debug("");
|
|
debug("Test immutability of inverse");
|
|
shouldBe('m.a', '0');
|
|
shouldBe('m.b', '0');
|
|
shouldBe('m.c', '0');
|
|
shouldBe('m.d', '0');
|
|
shouldBe('m.e', '0');
|
|
shouldBe('m.f', '0');
|
|
|
|
debug("");
|
|
|
|
</script>
|
|
<script src="../resources/js-test-post.js"></script>
|
|
|
|
<script>
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|