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