81fe6c99ae884f6fa92bcc9b84d5fe06ee226e67
[WebKit-https.git] / LayoutTests / transforms / 2d / cssmatrix-interface.xhtml
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"/>
4 <script src="../../fast/js/resources/js-test-pre.js"></script>
5 </head>
6 <body>
7 <div id="description"></div>
8 <div id="console"></div>
9
10 <script>
11
12 description("This test exercises the CSSMatrix interface");
13
14 debug("");
15 debug("CSSMatrix constructors");
16
17 var m = null;
18 m = new WebKitCSSMatrix();
19 if (m)
20   testPassed("default constructor");
21 else
22   testFailed("default constructor");
23
24 var m2 = new WebKitCSSMatrix(m);
25 if (m2)
26   testPassed("object constructor");
27 else
28   testFailed("object constructor");
29
30 m = new WebKitCSSMatrix("matrix(1, 0, 0, 1, 0, 0)");
31 if (m)
32   testPassed("string constructor");
33 else
34   testFailed("string constructor");
35
36 debug("");
37 debug("Test bad input to string constructor");
38 shouldThrow('new WebKitCSSMatrix("banana")');
39
40 debug("");
41 debug("Test attributes on default matrix");
42 m = new WebKitCSSMatrix();
43 shouldBe('m.a', '1');
44 shouldBe('m.b', '0');
45 shouldBe('m.c', '0');
46 shouldBe('m.d', '1');
47 shouldBe('m.e', '0');
48 shouldBe('m.f', '0');
49
50 debug("");
51 debug("Test attributes on custom matrix");
52 m = new WebKitCSSMatrix("matrix(11, 12, 21, 22, 41, 42)");
53 shouldBe('m.a', '11');
54 shouldBe('m.b', '12');
55 shouldBe('m.c', '21');
56 shouldBe('m.d', '22');
57 shouldBe('m.e', '41');
58 shouldBe('m.f', '42');
59
60 debug("");
61 debug("Test setMatrixValue - set to matrix()");
62 m = new WebKitCSSMatrix();
63 m.setMatrixValue("matrix(11, 12, 21, 22, 41, 42)");
64 shouldBe('m.a', '11');
65 shouldBe('m.b', '12');
66 shouldBe('m.c', '21');
67 shouldBe('m.d', '22');
68 shouldBe('m.e', '41');
69 shouldBe('m.f', '42');
70
71 debug("");
72 debug("Test setMatrixValue - set to translate(10px, 20px) scale(2, 3)");
73 m = new WebKitCSSMatrix();
74 m.setMatrixValue("translate(10px, 20px) scale(2, 3)");
75 shouldBe('m.a', '2');
76 shouldBe('m.b', '0');
77 shouldBe('m.c', '0');
78 shouldBe('m.d', '3');
79 shouldBe('m.e', '10');
80 shouldBe('m.f', '20');
81
82 debug("");
83 debug("Test throwing exception from setMatrixValue");
84 shouldThrow('m.setMatrixValue("banana")');
85 shouldThrow('m.setMatrixValue("translate(10em, 20%)")');
86 shouldThrow('m.setMatrixValue("translate(10px, 20px) scale()")');
87
88 debug("");
89 debug("Test multiply");
90 m = new WebKitCSSMatrix("matrix(1, 2, 3, 4, 5, 6)");
91 m2 = new WebKitCSSMatrix("matrix(7, 8, 9, 10, 11, 12)");
92 var m3 = m.multiply(m2);
93 shouldBe('parseFloat(m3.a)', '25');
94 shouldBe('parseFloat(m3.b)', '28');
95 shouldBe('parseFloat(m3.c)', '57');
96 shouldBe('parseFloat(m3.d)', '64');
97 shouldBe('parseFloat(m3.e)', '100');
98 shouldBe('parseFloat(m3.f)', '112');
99
100 debug("");
101 debug("Test inverse");
102 m = new WebKitCSSMatrix("matrix(2, 0, 0, 2, 10, 20)");
103 m2 = m.inverse();
104
105 shouldBe('parseFloat(m2.a)', '0.5');
106 shouldBe('parseFloat(m2.b)', '0');
107 shouldBe('parseFloat(m2.c)', '0');
108 shouldBe('parseFloat(m2.d)', '0.5');
109 shouldBe('parseFloat(m2.e)', '-5');
110 shouldBe('parseFloat(m2.f)', '-10');
111
112 debug("");
113 debug("Test throwing exception from inverse");
114 m = new WebKitCSSMatrix("matrix(0, 0, 0, 0, 0, 0)"); // not invertible
115 shouldThrow('m.inverse()');
116
117 debug("");
118 debug("Test translate");
119 m = new WebKitCSSMatrix();
120 m = m.translate(10, 20);
121 shouldBe('m.a', '1');
122 shouldBe('m.b', '0');
123 shouldBe('m.c', '0');
124 shouldBe('m.d', '1');
125 shouldBe('m.e', '10');
126 shouldBe('m.f', '20');
127
128 debug("");
129 debug("Test scale");
130 m = new WebKitCSSMatrix();
131 m = m.scale(10, 20);
132 shouldBe('m.a', '10');
133 shouldBe('m.b', '0');
134 shouldBe('m.c', '0');
135 shouldBe('m.d', '20');
136 shouldBe('m.e', '0');
137 shouldBe('m.f', '0');
138
139 debug("");
140 debug("Test rotate");
141 m = new WebKitCSSMatrix();
142 m = m.rotate(10);
143 shouldBe('Math.round(m.a*1000000)/1000000', '0.984808');
144 shouldBe('Math.round(m.b*1000000)/1000000', '0.173648');
145 shouldBe('Math.round(m.c*1000000)/1000000', '-0.173648');
146 shouldBe('Math.round(m.d*1000000)/1000000', '0.984808');
147 shouldBe('m.e', '0');
148 shouldBe('m.f', '0');
149
150 debug("");
151 successfullyParsed = true;
152
153 </script>
154 <script src="../../fast/js/resources/js-test-post.js"></script>
155
156 <script>
157 </script>
158
159 </body>
160 </html>