292 lines
6.8 KiB
HTML
292 lines
6.8 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 SVGMatrix interface");
|
|
|
|
debug("");
|
|
debug("SVGMatrix constructors");
|
|
|
|
var svgroot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
var m = null;
|
|
m = svgroot.createSVGMatrix();
|
|
if (m)
|
|
testPassed("default constructor");
|
|
else
|
|
testFailed("default constructor");
|
|
|
|
debug("");
|
|
debug("Test attributes on default matrix");
|
|
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 translate() and accumulation");
|
|
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 scaleNonUniform()");
|
|
var m4 = m3.scaleNonUniform(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 scaleNonUniform()");
|
|
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 = svgroot.createSVGMatrix();
|
|
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');
|
|
|
|
// TODO: write tests for rotateFromVector() and immutability
|
|
|
|
debug("");
|
|
debug("Test flipX()");
|
|
m4 = m3.flipX();
|
|
shouldBe('m4.a', '-5');
|
|
shouldBe('Math.abs(m4.b)', '0');
|
|
shouldBe('m4.c', '0');
|
|
shouldBe('m4.d', '5');
|
|
shouldBe('m4.e', '100');
|
|
shouldBe('m4.f', '50');
|
|
|
|
debug("");
|
|
debug("Test immutability of flipX()");
|
|
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 flipY()");
|
|
m4 = m3.flipY();
|
|
shouldBe('m4.a', '5');
|
|
shouldBe('m4.b', '0');
|
|
shouldBe('Math.abs(m4.c)', '0');
|
|
shouldBe('m4.d', '-5');
|
|
shouldBe('m4.e', '100');
|
|
shouldBe('m4.f', '50');
|
|
|
|
debug("");
|
|
debug("Test immutability of flipY()");
|
|
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 skewX()");
|
|
m = svgroot.createSVGMatrix();
|
|
m2 = m.skewX(30);
|
|
shouldBe('m2.a', '1');
|
|
shouldBe('m2.b', '0');
|
|
shouldBe('parseFloat(m2.c.toPrecision(6))', '0.577350');
|
|
shouldBe('m2.d', '1');
|
|
shouldBe('m2.e', '0');
|
|
shouldBe('m2.f', '0');
|
|
|
|
debug("");
|
|
debug("Test immutability of skewX()");
|
|
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 skewY()");
|
|
m = svgroot.createSVGMatrix();
|
|
m2 = m.skewY(30);
|
|
shouldBe('m2.a', '1');
|
|
shouldBe('parseFloat(m2.b.toPrecision(6))', '0.577350');
|
|
shouldBe('m2.c', '0');
|
|
shouldBe('m2.d', '1');
|
|
shouldBe('m2.e', '0');
|
|
shouldBe('m2.f', '0');
|
|
|
|
debug("");
|
|
debug("Test immutability of skewY()");
|
|
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 = svgroot.createSVGMatrix();
|
|
m.a = 1;
|
|
m.b = 2;
|
|
m.c = 3;
|
|
m.d = 4;
|
|
m.e = 5;
|
|
m.f = 6;
|
|
m2 = svgroot.createSVGMatrix();
|
|
m2.a = 7;
|
|
m2.b = 8;
|
|
m2.c = 9;
|
|
m2.d = 10;
|
|
m2.e = 11;
|
|
m2.f = 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 = svgroot.createSVGMatrix();
|
|
var sx = svgroot.createSVGMatrix();
|
|
tx = tx.translate(100,0);
|
|
sx = sx.scaleNonUniform(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 = null;
|
|
try {
|
|
m = tx.multiply();
|
|
} catch(e) {}
|
|
shouldBe('m', 'null');
|
|
|
|
debug("");
|
|
debug("Test inverse");
|
|
m = svgroot.createSVGMatrix();
|
|
m = m.translate(10,20);
|
|
m = m.scale(2);
|
|
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 = svgroot.createSVGMatrix();
|
|
m.a = 0;
|
|
m.c = 0;
|
|
shouldThrow('m.inverse()');
|
|
|
|
debug("");
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
|
|
<script>
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|