Moved CSSMatrix tests into LayoutTests/transforms so both 2D and 3D versions get...
[WebKit-https.git] / LayoutTests / transforms / cssmatrix-2d-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 toString");
38 var m = new WebKitCSSMatrix("matrix(1, 0, 0, 1, 0, 0)");
39 var s = m.toString();
40 var a = s.split('(');
41 shouldBe('a[0]', '"matrix"');
42 var a2 = a[1].split(',');
43 shouldBe('parseFloat(a2[0])', '1');
44 shouldBe('parseFloat(a2[1])', '0');
45 shouldBe('parseFloat(a2[2])', '0');
46 shouldBe('parseFloat(a2[3])', '1');
47 shouldBe('parseFloat(a2[4])', '0');
48 var a3 = a2[5].split(")");
49 shouldBe('parseFloat(a3[0])', '0');
50 shouldBe('a3[1]', '""');
51
52 debug("");
53 debug("Test bad input to string constructor");
54 shouldThrow('new WebKitCSSMatrix("banana")');
55
56 debug("");
57 debug("Test attributes on default matrix");
58 m = new WebKitCSSMatrix();
59 shouldBe('m.a', '1');
60 shouldBe('m.b', '0');
61 shouldBe('m.c', '0');
62 shouldBe('m.d', '1');
63 shouldBe('m.e', '0');
64 shouldBe('m.f', '0');
65
66 debug("");
67 debug("Test attributes on custom matrix");
68 m = new WebKitCSSMatrix("matrix(11, 12, 21, 22, 41, 42)");
69 shouldBe('m.a', '11');
70 shouldBe('m.b', '12');
71 shouldBe('m.c', '21');
72 shouldBe('m.d', '22');
73 shouldBe('m.e', '41');
74 shouldBe('m.f', '42');
75
76 debug("");
77 debug("Test setMatrixValue - set to matrix()");
78 m = new WebKitCSSMatrix();
79 m.setMatrixValue("matrix(11, 12, 21, 22, 41, 42)");
80 shouldBe('m.a', '11');
81 shouldBe('m.b', '12');
82 shouldBe('m.c', '21');
83 shouldBe('m.d', '22');
84 shouldBe('m.e', '41');
85 shouldBe('m.f', '42');
86
87 debug("");
88 debug("Test setMatrixValue - set to translate(10px, 20px) scale(2, 3)");
89 m = new WebKitCSSMatrix();
90 m.setMatrixValue("translate(10px, 20px) scale(2, 3)");
91 shouldBe('m.a', '2');
92 shouldBe('m.b', '0');
93 shouldBe('m.c', '0');
94 shouldBe('m.d', '3');
95 shouldBe('m.e', '10');
96 shouldBe('m.f', '20');
97
98 debug("");
99 debug("Test throwing exception from setMatrixValue");
100 shouldThrow('m.setMatrixValue("banana")');
101 shouldThrow('m.setMatrixValue("translate(10em, 20%)")');
102 shouldThrow('m.setMatrixValue("translate(10px, 20px) scale()")');
103
104 debug("");
105 debug("Test multiply");
106 m = new WebKitCSSMatrix("matrix(1, 2, 3, 4, 5, 6)");
107 m2 = new WebKitCSSMatrix("matrix(7, 8, 9, 10, 11, 12)");
108 var m3 = m.multiply(m2);
109 shouldBe('parseFloat(m3.a)', '25');
110 shouldBe('parseFloat(m3.b)', '28');
111 shouldBe('parseFloat(m3.c)', '57');
112 shouldBe('parseFloat(m3.d)', '64');
113 shouldBe('parseFloat(m3.e)', '100');
114 shouldBe('parseFloat(m3.f)', '112');
115
116 debug("");
117 debug("Test multiply with missing argument");
118 m = new WebKitCSSMatrix("matrix(1, 2, 3, 4, 5, 6)");
119 m2 = m.multiply();
120 shouldBe('m2', 'null');
121
122 debug("");
123 debug("Test immutability of multiply");
124 shouldBe('parseFloat(m.a)', '1');
125 shouldBe('parseFloat(m.b)', '2');
126 shouldBe('parseFloat(m.c)', '3');
127 shouldBe('parseFloat(m.d)', '4');
128 shouldBe('parseFloat(m.e)', '5');
129 shouldBe('parseFloat(m.f)', '6');
130
131 debug("");
132 debug("Test inverse");
133 m = new WebKitCSSMatrix("matrix(2, 0, 0, 2, 10, 20)");
134 m2 = m.inverse();
135
136 shouldBe('parseFloat(m2.a)', '0.5');
137 shouldBe('parseFloat(m2.b)', '0');
138 shouldBe('parseFloat(m2.c)', '0');
139 shouldBe('parseFloat(m2.d)', '0.5');
140 shouldBe('parseFloat(m2.e)', '-5');
141 shouldBe('parseFloat(m2.f)', '-10');
142
143 debug("");
144 debug("Test immutability of inverse");
145 shouldBe('parseFloat(m.a)', '2');
146 shouldBe('parseFloat(m.b)', '0');
147 shouldBe('parseFloat(m.c)', '0');
148 shouldBe('parseFloat(m.d)', '2');
149 shouldBe('parseFloat(m.e)', '10');
150 shouldBe('parseFloat(m.f)', '20');
151
152 debug("");
153 debug("Test throwing exception from inverse");
154 m = new WebKitCSSMatrix("matrix(0, 0, 0, 0, 0, 0)"); // not invertible
155 shouldThrow('m.inverse()');
156
157 debug("");
158 debug("Test translate");
159 m = new WebKitCSSMatrix();
160 m2 = m.translate(10, 20);
161 shouldBe('m2.a', '1');
162 shouldBe('m2.b', '0');
163 shouldBe('m2.c', '0');
164 shouldBe('m2.d', '1');
165 shouldBe('m2.e', '10');
166 shouldBe('m2.f', '20');
167
168 debug("");
169 debug("Test immutability of translate");
170 shouldBe('parseFloat(m.a)', '1');
171 shouldBe('parseFloat(m.b)', '0');
172 shouldBe('parseFloat(m.c)', '0');
173 shouldBe('parseFloat(m.d)', '1');
174 shouldBe('parseFloat(m.e)', '0');
175 shouldBe('parseFloat(m.f)', '0');
176
177 debug("");
178 debug("Test scale");
179 m = new WebKitCSSMatrix();
180 m2 = m.scale(10, 20);
181 shouldBe('m2.a', '10');
182 shouldBe('m2.b', '0');
183 shouldBe('m2.c', '0');
184 shouldBe('m2.d', '20');
185 shouldBe('m2.e', '0');
186 shouldBe('m2.f', '0');
187
188 debug("");
189 debug("Test immutability of scale");
190 shouldBe('parseFloat(m.a)', '1');
191 shouldBe('parseFloat(m.b)', '0');
192 shouldBe('parseFloat(m.c)', '0');
193 shouldBe('parseFloat(m.d)', '1');
194 shouldBe('parseFloat(m.e)', '0');
195 shouldBe('parseFloat(m.f)', '0');
196
197 debug("");
198 debug("Test rotate");
199 m = new WebKitCSSMatrix();
200 m2 = m.rotate(10);
201 shouldBe('parseFloat(m2.a.toPrecision(6))', '0.984808');
202 shouldBe('parseFloat(m2.b.toPrecision(6))', '0.173648');
203 shouldBe('parseFloat(m2.c.toPrecision(6))', '-0.173648');
204 shouldBe('parseFloat(m2.d.toPrecision(6))', '0.984808');
205 shouldBe('m.e', '0');
206 shouldBe('m.f', '0');
207
208 debug("");
209 debug("Test immutability of rotate");
210 shouldBe('parseFloat(m.a)', '1');
211 shouldBe('parseFloat(m.b)', '0');
212 shouldBe('parseFloat(m.c)', '0');
213 shouldBe('parseFloat(m.d)', '1');
214 shouldBe('parseFloat(m.e)', '0');
215 shouldBe('parseFloat(m.f)', '0');
216
217 debug("");
218 successfullyParsed = true;
219
220 </script>
221 <script src="../fast/js/resources/js-test-post.js"></script>
222
223 <script>
224 </script>
225
226 </body>
227 </html>