| <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> |